我需要通过客户端防火墙使用WCF推送技术。这一定是一个常见的问题,我知道它在理论上是有效的(参见下面的链接),但是我没能使它工作,而且我找不到能够演示它的代码示例。
要求:
解决方案似乎是双工netTcpBinding。根据这些信息:
WCF through firewalls and NATs
Keeping connections open in IIS
但我还没有找到一个有效的代码示例..我尝试将微软的WCF样本中的“Duplex”和“TcpActivation”样本结合起来,没有任何运气。请有人指出我可以使用的示例代码,或构建一个小样本应用程序。非常感谢!
答案 0 :(得分:4)
我找到了几个解决方案:
ZeroC Ice GPL有商业选项。只进行了快速测试。看起来比.NET Remoting更强大,并且非常积极地开发。
RemObjects商业,积极的开发,支持所有内容,但似乎没有GenuineChannel使用的所有更高级的功能。
GenuineChannels。它使用具有许多很好添加功能的远程处理,最重要的一个是通过NAT工作而无需打开客户端防火墙。不幸的是,似乎已经死了。
另一种解决方案是根据本文使用与IIS的流式传输:Keeping connections open in IIS
客户端在端口80向服务器发出第一个连接(带有IIS6的http,带有IIS7的tcp),然后连接保持打开,并且流式响应永远不会结束。
我没有时间去试验这个,我还没有找到一个样本,说它专门解决了防火墙问题,但这里有一个很好的样本可能有效:Streaming XML。
答案 1 :(得分:2)
您是否尝试过查看:http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx
您能举例说明您已尝试过的内容吗?有关防火墙等的详细信息,错误消息?
如果客户端和服务器都可以直接寻址并且防火墙不是问题,您是否考虑过允许客户注册提供支持合同的URL。然后,服务器可以在需要时调用此服务,而无需建立长时间运行(但主要是空闲连接),避免心脏跳动的需要,并且可以跨会话\连接使其具有弹性。
答案 2 :(得分:1)
在大多数防火墙设置中,如果TCP连接处于空闲状态以节省资源,则它将被防火墙拆除。空闲超时可能不是您可以控制的。如果他们闲置并且资源限制被击中,有些人会将其拆除。
大多数公司环境都不允许任何计算机进行出站TCP连接。
此外,使用此机制意味着您将遇到缩放问题。我认为更可靠的解决方案是排队信息并让您的客户定期轮询他们。如果可能,使用缓存,以便后续客户端轮询将从客户代理缓存中获取缓存数据(如果他们使用的话)。
如果你必须及时推送数据,在亚秒级土地(即金融服务),那么考虑一些消息传递基础设施,如客户端的NServiceBus分销商,但这需要客户安装...
你有没有尝试使用Toredo?读过它会出现在那里,对于用户来说设置太复杂了。
答案 3 :(得分:1)
我没有尝试过你所说的情景,所以我不能帮助太多,抱歉。如果您需要绕过的只是客户端防火墙,您可能需要查看this post。
祝你好运。答案 4 :(得分:1)
你试过这个吗? DuplexHttpBinding
它使用封装为自定义WCF绑定的智能轮询技术。所以它应该开箱即用。
答案 5 :(得分:-1)
您可以在客户端中执行以下更改,以便在启用防火墙的客户端上访问双工Web服务。