【发布时间】:2011-03-16 01:23:42
【问题描述】:
如何定义 WCF 客户端调用 WCF 服务时使用的 LocalEndPoint(如果客户端机器有多个 IP 地址)?
我有一台位于 DMZ 的机器,它有两个 IP 地址,外部 IP 地址可以通过我们位于外部服务提供商处的网络服务器的 VPN 连接通过防火墙访问。在这台机器上运行一个 WCF 和基于 Unity 的自定义应用程序服务器,它应该充当代理或应用程序级网关 (ALG)。它应该接受来自 Web 服务器的服务调用,并使用 wcf 客户端工厂重新生成服务调用,将它们转发到局域网中的真实应用服务器。
当使用 wcf 客户端工厂在此代理上重新创建服务调用时,wcf 客户端应使用此机器的第二个内部 IP 地址,因为只有来自此内部 IP 地址的消息才允许通过防火墙到达局域网中的应用服务器。不幸的是,我们的 wcf 客户端代理总是选择使用第一个“外部”IP 地址创建传出消息。我正在寻找一种方法来显式设置 wcf 客户端代理使用的 IP 地址。
我只能找到一个允许定义 LocalEndPoint 或 ClientBaseAddress 的 WCF 绑定元素:CompositeDuplexBindingElement。据我从文档中了解到,此属性旨在告诉服务器将异步回复消息发送到何处,因此它与我正在寻找的设置不同。
任何想法我可以做些什么来找到一个可行的解决方案?
提前感谢您提供任何有用的建议!
这似乎是一个类似的问题,只是使用 TcpClient/Sockets 而不是 WCF: Specify the outgoing IP address to use with TCPClient / Socket in C#
还有一个,这次是关于 SoapClient: Binding a new SoapClient to a specific IP address before sending outgoing request
【问题讨论】:
标签: wcf ip-address wcf-binding wcf-client