我有一个可以通过 http 端点访问的 WCF 网络服务。现在,该服务将通过 https 与负载均衡器一起发布。客户端是通过 svcutil.exe 在 .Net 中创建的,但 Java 客户端也需要 WSDL。
我的理解是:
- 在内部,Web 服务是一个 http 服务,无需更改任何内容。地址是http://myserver.com/example.svc和 WSDL ..?wsdl
- 在外部,该服务必须显示为 https 服务,地址为https://loadbalancer.com/example.svc和 WSDL ..?wsdl
从其他帖子中我了解到负载均衡器问题可以通过以下行为配置来解决:
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<!-- Use your own port numbers -->
<add scheme="http" port="81" />
<add scheme="https" port="444" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
</behavior>
使用此解决方法,我将两个 URL 解析为服务帮助页面,但调用 https://loadbalancer.com/example.svc该页面将我引导至http://loadbalancer.com/example.svc?wsdl。当我用 https 替换 http 时,我可以加载 wsdl 但它的所有内部链接都是http而不是https。
尝试切换 httpsGetEnabled="true" 会导致很多与 https 相关的问题,我不知道这是否可以帮助我,因为我的服务器本身只知道 http。
所以,我的问题是负载平衡 URL 的 https。我可以告诉 WCF 它应该在 WSDL 元数据中显示 https 而不是 http,我该怎么做?