我有一个在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?
答案 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副本。