Changing the publicly exposed endpoint URL for a W

2019-07-03 21:54发布

I have a WCF web service hosted in IIS7 which is reporting its endpoint URL as the following in its WSDL

http://machinename/virtualdirectory/service.svc

However the actual public URL which clients need to use is actually

http://machinename.mydomain.com/virtualdirectory/service.svc

And so at the moment clients that attempt to use this web service fail unless they manually edit the endpoint URL.

I know that I can fix this by changing the bindings of the site in IIS as per HOWTO: Fix WCF Host Name on IIS however in this case the site is shared with another application which stops working if I do this and so this isn't an option.

Is there another way that I can change the endpoint URL that WCF uses for this one virtual directory?

2条回答
▲ chillily
2楼-- · 2019-07-03 22:22

Although not directly answering my question (how can I set the WSDL endpoint URL in the web.config file) adding the <useRequestHeadersForMetadataAddress /> element to the <serviceBehaviors> section of my web.config file did fix my problems as now the endpoint URL is based on the URL used to access the WSDL, which is always the same as the URL used to call the web service.

Note that in this SO question it indicated that I needed to supply port numbers, note that this wasn't necessary for me - just adding the <useRequestHeadersForMetadataAddress /> element was enough

<serviceBehaviors>
   <behavior name="<name>">
     <!-- Other options would go here -->
     <useRequestHeadersForMetadataAddress />
   </behavior>
</serviceBehaviors>
查看更多
姐就是有狂的资本
3楼-- · 2019-07-03 22:32

There are a couple of options depending on which version of WCF your service is using. If you're using .NET 4 or higher, look at the accepted answer to this SO question. Otherwise you can either apply the hotfix that question references or if you're really desperate, hack the metadata URL of the httpGetUrl attribut to point to a copy of the WSDL which has been manually edited to contain the desired endpoint URL.

查看更多
登录 后发表回答