WCF 在负载均衡器后面的 wsdl 中提供不正确的 url

WCF provide incorrect urls in wsdl behind a load balancer

我在负载均衡器后面的 Web 服务器集群上安装了一个 wcf。

公共地址是:http://externaldomain/mywcf.svc,它是用户应该访问的唯一端点。

所以,当我将此 url 粘贴到浏览器中以查看 "the helper page"(显示 "wsdl" 文件的 url 的页面) 地址与我预期的不一样:“http://externaldomain/mywcf.svc?wsdl" but "http://server1/mywcf.svc?wsdl”(server1 是 wcf 运行 所在的服务器的名称,用户已被负载均衡器路由)

这使得无法将服务添加到 visualstudio,因为建议的地址“http://server1/mywcf.svc=wsdl”是私有地址 url

那么,我应该如何配置 wcf 设置以使 "aspnet" 生成具有 "correct" 地址的帮助页面? 在 web.config

中是否有一些 "proxy" 节点或类似的设置
  #### public url ####           #### private url ####

                                (http://server1)
                                 ----------------
                            -->  -- webserver1 --
                           /     ----------------
                          /
 (http://externaldomain) /
 ---------------------- /
 --- load balancer ---- 
 ---------------------- \
                         \
                          \
                           \     (http://server2)
                            -->  ----------------
                                 -- webserver2 --
                                 ----------------

WCF 对于这种情况有特殊的行为 useRequestHeadersForMetadataAddress

<serviceBehaviors>

  <behavior>

    <useRequestHeadersForMetadataAddress/>

  </behavior>

</serviceBehaviors>

此行为使服务将请求中使用的 url 替换为 url,从而避免了您提到的问题。更多信息:http://zamd.net/wcf/2010/01/14/using-request-headers-for-metadata-address.html