在不更改站点绑定的情况下更改WCF Web服务的公开端点URL

时间:2012-03-12 14:20:14

标签: wcf web-services iis-7 configuration

我有一个在IIS7中托管的WCF Web服务,它在其WSDL中报告其端点URL如下所示

http://machinename/virtualdirectory/service.svc

然而,客户需要使用的实际公共URL实际上是

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

所以当前尝试使用此Web服务的客户端会失败,除非他们手动编辑端点URL。

我知道我可以通过按HOWTO: Fix WCF Host Name on IIS更改IIS中网站的绑定来解决此问题,但是在这种情况下,该网站会与其他应用程序共享,如果我这样做会停止工作,所以不是一个选项。

是否有其他方法可以更改WCF用于此虚拟目录的端点URL?

2 个答案:

答案 0 :(得分:7)

虽然没有直接回答我的问题(如何在web.config文件中设置WSDL端点URL),但是将<useRequestHeadersForMetadataAddress />元素添加到我的web.config文件的<serviceBehaviors>部分确实修复了我的问题。现在问题是端点URL基于用于访问WSDL的URL,该URL始终与用于调用Web服务的URL相同。

请注意,在this SO question中,它表示我需要提供端口号,请注意,这对我来说不是必需的 - 只需添加<useRequestHeadersForMetadataAddress />元素就足够了

<serviceBehaviors>
   <behavior name="<name>">
     <!-- Other options would go here -->
     <useRequestHeadersForMetadataAddress />
   </behavior>
</serviceBehaviors>

答案 1 :(得分:1)

根据您的服务使用的WCF版本,有几个选项。如果您使用的是.NET 4或更高版本,请查看this SO question的已接受答案。否则,您可以应用问题引用的修补程序,或者如果您真的绝望,请破解httpGetUrl attribut的元数据URL以指向已手动编辑以包含所需端点URL的WSDL副本。