Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WCF WebService / IIS Hosting & Configuration Issue Behind a Firewall

I have a simple WCF Web service. It's hosted on IIS under the default website in our production domain. (local address: 10.10.20.100)

By default this default website was setup for "All Unassigned" IP's on Port 80: however, I noticed that this caused the WCF Service to generate it's WSDL using the servers local DNS name. i.e. all the URIs in the wsdl were

http://myserver.subdomain.domain.com/.../... 

This was no good as I need to expose this service to sites who have no knowledge of the production environments internal DNS. And this particular server doesn't have an external DNS Name. Just an external IP Address...

I've had some success with changing the Setting in IIS from "All Unassigned" -> "10.10.20.100"

This causes the Service to generate it's WSDL with the URIs

http://10.10.20.100/.../... 

This is fine for other machines within the subdomain and on other subdomains but it's here that I get stuck. The servers External IP Address (1.2.3.4) is mapped through via some NAT/PAT translation so it isn't explicitly setup in the servers IP Settings (i.e. it doesn't show under IP Config)

So if I change the IIS Default Website IP Address from "All Unassigned" -> "1.2.3.4" as I did for the internal address, then the WCF Service just comes back with...

Bad Request (Invalid Hostname)

And if I leave IIS Configured on the Internal IP Address, and try to access the service via the external IP Address I get

No protocol binding matches the given address  'http://1.2.3.4/TestService/Service.svc'. Protocol bindings are  configured at the Site level in IIS or WAS configuration 

Is there any way to make IIS/WCF generate it's WSDL URI's with an external IP Address that isn't explicitly configured on the server ?

Someone help me please before I dropkick WCF Services out the window.

like image 707
Eoin Campbell Avatar asked Apr 27 '09 11:04

Eoin Campbell


People also ask

Does WCF use IIS?

Windows Communication Foundation (WCF) Services can be hosted with Internet Information Services (IIS); with the new Windows Activation Service (WAS) installed with IIS 7.0; or with any managed application process including console, Windows Forms, Windows Presentation Foundation (WPF), or managed Windows service ...

What is WCF in IIS?

This topic outlines the basic steps required to create a Windows Communication Foundation (WCF) service that is hosted in Internet Information Services (IIS). This topic assumes you are familiar with IIS and understand how to use the IIS management tool to create and manage IIS applications.

Where can a WCF service be hosted?

WCF services can be hosted in any managed application. This is the most flexible option because it requires the least infrastructure to deploy. You embed the code for the service inside the managed application code and then create and open an instance of the ServiceHost to make the service available.


2 Answers

It's because you don't have your host headers set. This seems to be an extremely common problem, I run into it all the time. There's no configuration for the uris that it generates, it looks up the right address by examining the host header of the site. Even if it's in a virtual directory, you need to go to the parent, in your case, default directory, and add a host header.

Let me know if you don't know how to do this.

like image 90
Joshua Belden Avatar answered Oct 15 '22 00:10

Joshua Belden


Must it be an IP address and not an FQDN? By swapping to an FQDN and setting that in the host headers for the site, then binding to it via

cscript //nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs set W3SVC/1/ServerBindings ":80:hostname.example.com" 

then recycling the app pool will then produce that host name in the generated WSDL. You get benefits with that - you can setup an internal DNS which resolves that FQDN to the internal IP, and an external DNS which resolves to your firewall IP, then the same system will work without any changes.

like image 36
blowdart Avatar answered Oct 15 '22 01:10

blowdart