Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / Web Services / November 2007

Tip: Looking for answers? Try searching our database.

Web service test page uses internal port

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Ben M - 09 Nov 2007 20:22 GMT
I am having trouble with the ASP.NET web service auto-generated test page
which is created automatically when a web service is defined.  It adds our
internal port number in the form submit location which breaks the page since
our external port number is much different.  Is there any way to set that
port number manually or stop it from using the internal port?

I will describe our situation in more detail below if what I said above does
not make sense.

Requests come into our load balancer on port 80 or port 443 (the load
balancer is also an ssl off-loader which deals with the ssl certificates and
client connections).  It then connects to one of our 8 web servers using an
internal ip address and port number (such as 8000 in this case).  It always
communicates with the web server unsecured.

Our web services work, but the auto-generated test page does not because it
adds in the internal port number for some reason.  I need to get rid of that
port number so that remote developers can use the test page.
Steven Cheng[MSFT] - 12 Nov 2007 05:08 GMT
Hi Ben,

From your description, I got that you have an ASP.NET webservice which has
been hosted behind some load-balance server. And you find that the default
test page(use http post) doesn't quite work as the postback url is pointing
to the internal url(not the load balance one), correct?

Based on my experience, this is due to the limitation of http/get test
page's generation. ASP.NET webservice by default use the url (from local
server view) for the service address of all those binding ports(soap,
soap12 , HTTP GET or HTTP POST). For SOAP ones, we can perform some
customization through the means mentioned below:

#Walkthrough: Customizing the Generation of Service Descriptions and Proxy
Classes  
http://msdn2.microsoft.com/en-us/library/x4s9z3yc.aspx

#Modifying WSDL in Visual Studio 2003
http://forums.asp.net/p/951337/1586924.aspx#1586924

However, http get/post endpoints doesn't expose the interfaces for us to
customize it. For the test page, it use "HTTP/POST" approach, therefore, if
you do need a test page that use the external(load-balance awared) url, you
can create a custom test page which simply contains the html <form> that
point to the correct address. And for other parts on the form, you can
simply dupliate them from the default test page.  BTW, the following
article mentioned the way to modify(or provide a custom version of the
"DefaultWsdlHelpGenerator.aspx", you can also have a look for reference
though that's not quite recommended:

#How-to: Customize the Generated Web Service Test Page
http://weblogs.asp.net/jan/archive/2004/01/29/64291.aspx

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead



==================================================

Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.



Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.

==================================================
   

This posting is provided "AS IS" with no warranties, and confers no rights.

--------------------
>From: =?Utf-8?B?QmVuIE0=?= <BenM@newsgroup.nospam>
>Subject: Web service test page uses internal port
>Date: Fri, 9 Nov 2007 12:22:00 -0800

>I am having trouble with the ASP.NET web service auto-generated test page
>which is created automatically when a web service is defined.  It adds our
[quoted text clipped - 14 lines]
>adds in the internal port number for some reason.  I need to get rid of that
>port number so that remote developers can use the test page.
Ben M - 12 Nov 2007 19:46 GMT
Thank you Steven!  Using the links you provided I was able to fix most, but
not all, of my problems.  Now that I understand the situation better I have
identified 3 issues, two of which I have resolved (documented below for
reference) and one that has not been resolved which I still need your help
with.

#1 - Port in test page
-------------------------------
I was able to fix this issue by copying the DefaultWsdlHelpGenerator.aspx
file from the current framework config sub directory to my website and adding
1 line of code to remove the port from the test page when it was posted to
our live server.  I left it alone if the location was localhost so that I
could still develop using custom port numbers.  Here is the line of code I
added:

 if (!httpAddress.Location.StartsWith("http://localhost"))
   {httpAddress.Location = httpAddress.Location.Replace("8000",
"80").ToString();}

I also had to add the following to the web config file in order to use the
custom test page:

 <webServices>
   <wsdlHelpGenerator href="DefaultWsdlHelpGenerator.aspx"/>
 </webServices>

#2 - Port in the WSDL for Soap
---------------------------------------------
I was able to fix this by adding a custom class to the App_Code directory:

Imports System
Imports System.Web.Services.Description

Public Class CustomSoapExtensionReflector
   Inherits SoapExtensionReflector

   Public Overloads Overrides Sub ReflectMethod()
       'no-op
   End Sub

   Public Overloads Overrides Sub ReflectDescription()
       Dim description As ServiceDescription =
ReflectionContext.ServiceDescription
       For Each service As Service In description.Services
           For Each port As Port In service.Ports
               For Each extension As ServiceDescriptionFormatExtension In
port.Extensions
                   Dim binding As SoapAddressBinding = TryCast(extension,
SoapAddressBinding)
                   If binding IsNot Nothing Then
                       If Not
binding.Location.StartsWith("http://localhost") Then
                           binding.Location =
binding.Location.Replace(":8000", "")
                       End If
                   End If
               Next
           Next
       Next
   End Sub
End Class

And also modifying the web.config to point to the new class:

 <webServices>
   <soapExtensionReflectorTypes>
     <add type="CustomSoapExtensionReflector, App_Code"/>
   </soapExtensionReflectorTypes>
 </webServices>

#2 - Port in the WSDL for Http
--------------------------------------------
This issue has NOT been resolved.  Although the solution to issue #2 solved
the first two items in the WSDL (see Soap & Soap12 below) it did not solve
the third item, HttpPost (see the port 8000 still in the WSDL file below).  I
still need help figuring out how to change that one along with the others.

<wsdl:service name="MyWebServices">
 <wsdl:port name="MyWebServicesSoap" binding="tns:MyWebServicesSoap">
   <soap:address location="http://www.mydomain.com/MyWebServices.asmx" />
 </wsdl:port>
 <wsdl:port name="MyWebServicesSoap12" binding="tns:MyWebServicesSoap12">
   <soap12:address location="http://www.mydomain.com/MyWebServices.asmx" />
 </wsdl:port>
 <wsdl:port name="MyWebServicesHttpPost" binding="tns:MyWebServicesHttpPost">
   <http:address location="http://www.mydomain.com:8000/MyWebServices.asmx"
/>
 </wsdl:port>
</wsdl:service>

Thanks in advance for any additional help!
Steven Cheng[MSFT] - 13 Nov 2007 02:55 GMT
Thanks for your reply Ben,

Yes, the 3rd question is also what I have mentioned in last reply.
Currently it seems ASP.NET webservice handler has done the http GET/POST
test page rendering itself and doesn't provide any means to customize it.
I've met some one encountering the same problem before.  So far what we can
get is using a custom test page to invoke the webservice via http GET/POST.
You will also need to replace the test page link in the WSDL document
display page.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead
   

This posting is provided "AS IS" with no warranties, and confers no rights.

-------------------->
>References:  <BE87A28A-CA22-4DDC-84E6-247A81B068EE@microsoft.com>
<5KbSaoOJIHA.4200@TK2MSFTNGHUB02.phx.gbl>
>Subject: RE: Web service test page uses internal port
>Date: Mon, 12 Nov 2007 11:46:01 -0800
[quoted text clipped - 74 lines]
>the first two items in the WSDL (see Soap & Soap12 below) it did not solve
>the third item, HttpPost (see the port 8000 still in the WSDL file below).
I
>still need help figuring out how to change that one along with the others.
>
[quoted text clipped - 12 lines]
>
>Thanks in advance for any additional help!
Steven Cheng[MSFT] - 15 Nov 2007 09:46 GMT
Hi Ben,

Any progress on this? If there is anything else we can help, please feel
free to post here.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead
   

This posting is provided "AS IS" with no warranties, and confers no rights.

--------------------
>From: stcheng@online.microsoft.com (Steven Cheng[MSFT])
>Organization: Microsoft
>Date: Tue, 13 Nov 2007 02:55:57 GMT

>Thanks for your reply Ben,
>
[quoted text clipped - 14 lines]
>
>This posting is provided "AS IS" with no warranties, and confers no rights.

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.