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 / March 2007

Tip: Looking for answers? Try searching our database.

contacting secure webservice behind loadbalancer

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Esquerel - 28 Feb 2007 09:34 GMT
Hello,

This is my first post, so i don't really now if i'm in the right group here.

We have 2 servers behind a load balancer, SSL offLoading is enabled on the
loadbalancer.
Both servers contain 2 identical webservices.
the first can be contacted trough http.
the other through https.

When in VS.NET i add a WebRefence to the secured webservice
(https://website/webservice/webservice.asmx) I get the following
Error message:

--
Unable to download following files from .
http://website:81/webservice/webservice.asmx?wsdl
Do you want to skip these files and continue?
--

When i contact the first webservice, everything works ok.

When i set the the webreference to Dynamic URL behavoir and
change the webreference URL to the secured webservice the following
exception
occures:

--
"System.Web.Services.Protocols.SoapHeaderException: Server unavailable,
please try later --->
System.ApplicationException: An error occured processing an outgoing fault
response\n
--- End of inner exception stack trace ---"
--

Does anyone now how to fix this problem?
Is it true that to problem lies in the loadbalancer, that the SSL offloading
is causing the problem
cause SSL encryption occures on the loadbalancer and not on the 2 server?

Thanks in advance,

Regards,

Tyhrstan van den Berg
Steven Cheng[MSFT] - 01 Mar 2007 03:35 GMT
Hello Tyhrstan,

From your description, you have an web service applications which has been
deployed as secured(https/ssl) and non-secured on two webservers work as
loading balance mode. However, when you try consuming the secured
webservice, you always get exception, correct?

Based on my experience, for consuming https/ssl secured ASP.NET webservice,
you need to first create the webservice proxy through non-secured endpoint
(http://  url), and then manually change the address to https one.

Also, for https/ssl secured webservice, so far I only ever met some
problems about the validation of server-side certificate. Because for
HTTPS/SSL, the client-side will always try validating the server
certificate of the SSL server-side, if the certificate is not recognized as
a trusted one, then, it will raise exception (for webservice scenario since
it is non-interactive).  Here is a web article mentioned this:

http://weblogs.asp.net/jan/archive/2003/12/04/41154.aspx

I suggest you try consuming the https/ssl secured webservice without  using
load balance mode to see whether you can correctly consume it. If still
not, the problem should be related to the ssl/https channel intialization.
If it works, the problem should be caused by the load balance mode.

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.
Esquerel - 01 Mar 2007 08:47 GMT
Hello Steven,

We have tried your first solution to the problem but still the same error.

We suspect it has something to do with the discovery file because when
we load the url https://website/webservice/webservice.asmx?disco
it shows the following urls in the discovery file.

------------
<contractRef ref=http://website:81/Webservice/webservice.asmx?wsdl
docRef="=http://website:81/Webservice/webservice.asmx"
xmlns="http://schemas.xmlsoap.org/disco/scl/" />

<soap address="=http://website:81/Webservice/webservice.asmx"
xmlns:q1="http:website/ws" binding="q1:ExchangeSoap"
xmlns="http://schemas.xmlsoap.org/disco/soap/" />
------------

When we change the disco file at client side, still the same error occures,
looks like the disco file is loaded at every request?

We have found a way to change to soap address to https using a
SoapExtensionReflector
described at http://forums.asp.net/thread/1160212.aspx for vs.net 2003.

but we have no idea if its possible to change the contractRef URLs and if
this can also solve the problem.

It's impossible to test the webservice without the loadbalancer, cause the
loadbalancer is not managed by us.

Regards,

Tyhrstan van den Berg
Steven Cheng[MSFT] - 02 Mar 2007 09:00 GMT
Hi Tyhrstan,

Thanks for your reply.

So you're still create the web reference against the web url WSDL/disco
document?  I suggset you first use IE to visit the webservice asmx endpoint
and download the WSDL document(xxx.asmx?wsdl). You can save the wsdl
document into local filesystem. In Visual Studio, you can directly add web
reference against the local saved wsdl document to generate the proxy(and
change the service url to the https address when you use it at runtime).

Also, instead of using the Visual Studio "Add WebReference" add-in, you can
use the wsdl.exe utiilty to generate the client proxy:

#Web Services Description Language Tool (Wsdl.exe)  
http://msdn2.microsoft.com/en-us/library/7h3ystb6(VS.80).aspx

based on my understanding, after you've generate the proxy class, it no
longer need to read the WSDL document. An exception is that you're adding
webreference in ASP.NET 2.0 website project. Since client webservice proxy
is dynamically compiled, it will frequently use the local downloaded
disco/wsdl map. If this is the case, you can consider use wsdl.exe utility
to generate the proxy, or create a separate class library project to create
the webreference and use it in ASP.NET web application.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no rights.
Steven Cheng[MSFT] - 06 Mar 2007 12:37 GMT
Hello Tyhrstan,

Have you got any progress on this issue? Due to the complexity of this
issue, it may require further troubleshooting, if you feel this an urgent
issue and need further assistance, I suggest you contact CSS and open a
regular support incident on this:

http://msdn.microsoft.com/subscriptions/support/default.aspx

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead

This posting is provided "AS IS" with no warranties, and confers no rights.
Esquerel - 08 Mar 2007 13:31 GMT
Hello Steven,

Thank you for your suggestions in your previous message,
after whe tried the first suggestion, the following error occured:

--
Microsoft.Web.Services2.Addressing.AddressingFault: Destination
Unreachable ---> System.Exception: WSE816: The <To> header must match the
value of an incoming message's HTTP Request Url if the soap receiver does
not have an actor name. The <To> header received contained
"https://website/service.asmx" while the HTTP Request Url was
"http://website:81/service.asmx
--

We solved this issue by setting the SoapActor hardcoded like

--
<System.Web.Services.WebService(Namespace:="http://tempuri.org/WSEWebService/Service1"),
_
SoapActor("https://website/service.asmx")> _
Public Class Service1
--

This solved the problem.

Now the only issue is that the hardcoded soapactor isn't a pretty solution,
and the soapactor requires a static value..

Thank you very much.

Regards,

Tyhrstan van den Berg

> Hello Tyhrstan,
>
[quoted text clipped - 13 lines]
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
Steven Cheng[MSFT] - 09 Mar 2007 03:01 GMT
Thanks for your followup Tyhrstan,

Glad that you've figured out the issue and got a workable solution.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead

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.