我的部署环境在IIS 7.5托管的WCF服务之前有SSL卸载(和负载平衡)硬件。所以外面的世界会去
https://mydomain.com/MyService.svc
硬件将处理SSL并将流量转发到
http://myintranet/MyService.svc
但是,当我从外部获取WSDL时(通过添加“?wsdl”),WSDL的地址是“http://mydomain.com/MyService.svc” - 我公共地址的不安全,非SSL版本。 / p>
我尝试显式设置listenUri,但是我收到一个错误,因为我的网站还需要多个绑定(我内部可以访问它,超出SSL卸载但通过负载均衡器,或绕过负载均衡器并到达站点(s)直接):
When 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' is set to true in configuration, the endpoints are required to specify a relative address. If you are specifying a relative listen URI on the endpoint, then the address can be absolute.
我尝试过多种baseAddresses,前缀过滤器,多个端点等组合,但总是会出现一个错误或另一个错误。尽管我用了最好的谷歌搜索,我找不到其他任何人。
答案 0 :(得分:0)
我们有一段时间让SSL卸载与WCF一起工作。问题是相同的配置开关确定允许的协议(必须是http)和代理中发出的协议(必须是https)。我们的答案是放弃SSL卸载要求。我们可能已经太容易放弃了。
如果您比我们更顽强,您可以考虑尝试自定义WSDL导出器,如文档here所述。
答案 1 :(得分:0)
基本上,我们正在使用" httpsViaProxyTransport"我们从野外发现的示例代码创建。这使WCF确信它是一种安全传输,即使它只是HTTP。
然后在/configuration/system.serviceModel/serviceHostingEnvironment中,我们设置了一些baseAddressPrefixFilters。我们设置了HTTP和HTTPS,因为我们有时会在NLB / SSL-offloader后面访问它。
<baseAddressPrefixFilters>
<add prefix="http://MyService.mydomain.com/"/>
<add prefix="https://MyService.mydomain.com/"/>
</baseAddressPrefixFilters>