我在 Internet 托管服务提供商中部署了一个 Web 应用程序。此 Web 应用程序使用部署在我公司应用程序服务器的 IIS 服务器上的 WCF 服务,为了对公司的数据库进行数据访问,出于安全原因,网络人员允许我通过防火墙公开此 WCF 服务。图表看起来像这样。
[托管页面] ---> (Internet) ---> |防火墙
<Public IP>:<Port-X >
| ---> [带有 WCF 服务的 IIS<Comp. Network Ip>:<Port-Y>
]
我还想使用 wsHttpBinding 来利用其安全功能,并加密敏感信息。
尝试后我收到以下错误:
异常详细信息:System.ServiceModel.EndpointNotFoundException:由于 EndpointDispatcher 的 AddressFilter 不匹配,接收方无法处理带有“http://:/service/WCFService.svc”的消息。检查发送方和接收方的 EndpointAddresses 是否一致。
做了一些研究,我发现 wsHttpBinding 使用 WS-Addressing 标准,并且阅读了这个标准,我了解到 SOAP 标头被增强以包含像“MessageID”、“ReplyTo”、“Action”和“To”这样的标签。
所以我猜测,因为客户端应用程序端点指定了防火墙 IP 地址和端口,并且服务使用与防火墙 IP 不同的内部网络地址进行回复,所以 WS-Addressing 会触发上述消息。我认为这是一个非常好的安全措施,但在我的场景中并不是很有用。
引用 WS-Addressing 标准提交 ( http://www.w3.org/Submission/ws-addressing/ )
“由于目前广泛使用的网络技术范围(例如,NAT、DHCP、防火墙),许多部署无法为给定端点分配有意义的全局 URI。为了允许这些‘匿名’端点启动消息交换模式和接收回复时,WS-Addressing 定义了以下众所周知的 URI,供无法具有稳定、可解析 URI 的端点使用 。http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous “
如何配置我的 wsHttpBinding 端点来寻址我的防火墙的 IP 并忽略或绕过 SOAP 消息头中的“To”WS-Addressing 标记中指定的地址?或者我是否必须更改我的服务端点配置中的某些内容?
帮助和指导将不胜感激。
马尔科。
PS:虽然我找到了任何解决方案,但我使用 basicHttpBinding 当然绝对没有问题。