如何使用WSDL中的HTTPS为卸载的SSL配置WCF服务的服务端点

时间:2012-02-23 17:22:48

标签: wcf iis ssl https wcf-binding

我的部署环境在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,前缀过滤器,多个端点等组合,但总是会出现一个错误或另一个错误。尽管我用了最好的谷歌搜索,我找不到其他任何人。

2 个答案:

答案 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>