如何在 WSDL 中使用 HTTPS 为卸载 SSL 后的 WCF 服务配置服务端点
Posted
技术标签:
【中文标题】如何在 WSDL 中使用 HTTPS 为卸载 SSL 后的 WCF 服务配置服务端点【英文标题】:How to configure service endpoints for WCF service behind offloaded SSL with HTTPS in WSDL 【发布时间】:2012-03-14 03:31:37 【问题描述】:我的部署环境在我的 IIS 7.5 托管 WCF 服务前面有 SSL 卸载(和负载平衡)硬件。所以虽然外面的世界会去
https://mydomain.com/MyService.svc
硬件将处理 SSL 并将流量转发到
http://myintranet/MyService.svc
但是,当我从外部获取 WSDL(通过添加“?wsdl”)时,WSDL 地址用于“http://mydomain.com/MyService.svc”——我的公共地址的不安全、非 SSL 版本。
我尝试显式设置 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.
我尝试了多种基本地址、前缀过滤器、多个端点等的组合,但总是以一个错误或另一个错误告终。尽管我在谷歌上搜索得最好,但我找不到其他人使用此设置。
【问题讨论】:
如果您有 SSL 卸载的场景,那么值得您考虑使用 basicHttpBinding,因为负载均衡器和您的 Web 服务器之间的流量将位于您自己的防火墙之后并且是安全的。但是,如果您要对用户名密码执行身份验证,请考虑检查 clearusernamebinding,它允许您通过 basichttpbinding 传输用户名 passowrd:webservices20.blogspot.com/2008/11/… @Rajesh,我实际上已经使用了 SSL 卸载的替代策略 (blog.hackedbrain.com/2006/09/26/…)。但我仍然希望我生成的 WSDL 包含一个 HTTPS 端点 URI,而我的实际站点需要绑定到几个非 HTTPS 名称。 您找到解决方案了吗? 有没有任何方法可以克服这个问题。我面临同样的问题。谢谢 【参考方案1】:我们在让 SSL 卸载与 WCF 一起工作时遇到了麻烦。问题是相同的配置开关决定了允许的协议(必须是 http)和代理中发出的协议(必须是 https)。我们的答案是放弃 SSL 卸载要求。我们可能放弃得太容易了。
如果您比我们更顽强,您可以考虑尝试自定义 WSDL 导出器,如 here 所述。
【讨论】:
【参考方案2】:我忘了我问过这个。我们最终确实找到了一个解决方案,虽然已经很久了,我不记得所有的细节。相反,我从我们现有的配置中提取我认为是关键点的信息。
基本上,我们使用的是根据我们在野外找到的示例代码创建的“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>
【讨论】:
以上是关于如何在 WSDL 中使用 HTTPS 为卸载 SSL 后的 WCF 服务配置服务端点的主要内容,如果未能解决你的问题,请参考以下文章
Workday - 如何在 Workday 中以编程方式获取 WSDL 列表