WCF通过防火墙推送到客户端?

Sir*_*ire 9 .net wcf firewall push duplex

另请参阅WCF服务器如何通知WCF客户端有关更改的信息?(更好的解决方案然后简单的轮询,例如Coment或长轮询)

我需要通过客户端防火墙使用WCF推送技术.这一定是一个常见的问题,而且我知道它在理论上是有效的(参见下面的链接),但是我没能使它工作,而且我找不到能够演示它的代码示例.

要求:

  • WCF
  • 客户端通过tcp端口80(netTcpBinding)连接到服务器.
  • 服务器以不规则的间隔(1分钟到几个小时)推送信息.
  • 用户不必配置防火墙,服务器推送必须通过所有入站端口关闭的防火墙.为此,需要在同一连接上使用TCP双工,双重绑定不起作用,因为必须在客户端防火墙上打开端口.
  • 客户端定期(可能每15分钟)向服务器发送心跳,因此服务器知道客户端仍处于活动状态.
  • 服务器是带有WAS的IIS7.

解决方案似乎是双工netTcpBinding.根据这些信息:

WCF通过防火墙和NAT

在IIS中保持连接打开

但我还没有找到一个有效的代码示例..我尝试将微软的WCF样本中的"Duplex"和"TcpActivation"样本结合起来,没有任何运气.请有人指出我可以使用的示例代码,或构建一个小样本应用程序.非常感谢!

Sir*_*ire 5

我找到了几个解决方案:

ZeroC Ice GPL 带有商业选项。只是快速测试。看起来比 .NET Remoting 更强大,并且开发非常积极。

RemObjects Commercial 积极开发,支持一切,但似乎没有 GenuineChannels 使用的所有更高级的功能。

正版频道。它使用具有许多不错的附加功能的远程处理,最重要的是它可以通过 NAT 工作,而无需打开客户端防火墙。可惜好像已经死得很惨了。

另一种解决方案是使用 IIS 流式传输,根据这篇文章:在 IIS 中保持连接打开

客户端在端口 80 上与服务器建立第一个连接(使用 IIS6 的 http,使用 IIS7 的 tcp),然后连接保持打开状态,并使用永不结束的流响应。

我没有时间对此进行试验,也没有找到说明它专门解决防火墙问题的示例,但这里有一个可能有效的优秀示例:Streaming XML