2008-08-22 149 views
7

又见How does a WCF server inform a WCF client about changes? (Better solution then simple polling, e.g. Coment or long polling)WCF通过防火墙推送到客户端?

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

要求:

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

该解决方案似乎是双工netTcpBinding。基于这样的信息:

WCF through firewalls and NATs

Keeping connections open in IIS

但我还没有找到一个代码示例工程..我试着从微软的WCF采样结合的“双面”和“TcpActivation”样本没有任何运气。请有人指点我的示例代码,或者构建一个小示例应用程序。非常感谢!

+1

你遇到任何异常?究竟是什么不工作? – jrista 2009-10-23 01:05:29

回答

3

我发现了几个解决方案:

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

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

GenuineChannels。它使用远程处理以及许多不错的附加功能,其中最重要的功能是通过NAT工作,而无需打开客户端防火墙。不幸的是似乎已经死了。

另一种解决方案是使用与IIS流,根据此文章:Keeping connections open in IIS

客户端发出在端口80中的第一连接(HTTP与IIS6,TCP与IIS7)到服务器,该连接然后保持以永不停止的流式响应打开。

我还没有时间来尝试这个,我还没有找到一个说明它明确解决防火墙问题的示例,但下面是一个很好的示例,可能适用于:Streaming XML

+0

当您在IIS上保持连接打开时,您必须非常小心 - 您可以用尽工作线程(并且速度很快)。我建议你阅读IAsyncHttpHandler - 以及如何从WCF获得相同的功能。最坏的情况下你可能不得不进行民意调查 – 2009-06-04 18:37:47

1

在大多数防火墙设置中,如果TCP连接闲置以节约资源,则TCP连接将被防火墙拆除。空闲超时可能不是您可以控制的。如果他们闲置并且正在打击资源限制,有些人会把他们推倒。

大多数公司的环境不允许任何机器建立一个出站TCP连接。

此外,使用这种机制意味着你将有缩放问题。我认为更可靠的解决方案是排队信息,让您的客户定期轮询。如果可能的话,尽量使用缓存,以便后续客户端轮询将从客户代理缓存中获取缓存数据(如果使用的话)。

如果你不得不在亚秒级土地(即金融服务)及时推送数据,那么在客户端考虑一些消息基础设施,如NServiceBus分销商,但这将需要客户安装...

所以你有没有尝试过使用Toredo?读过它会出现在那里,这对于用户来说设置太复杂了。

1

我还没有尝试过你提到的情况,所以我不能太多的帮助,对不起。如果您只需绕过客户端防火墙,则可能需要检出this post

祝你好运。

2

您是否尝试过寻找:http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

你能提供什么,你已经尝试的例子吗?有了防火墙等的详细信息,错误消息?

如果客户端和服务器都可以直接寻址并且防火墙不是问题,您是否考虑允许客户端注册提供支持合同的URL?服务器随后可以在需要时调用此服务,而无需建立长时间运行(但大多数情况下为空闲连接),避免需要跳动心跳,并且可以在会话\连接之间进行恢复。

+0

是的,它不能通过防火墙。 – Sire 2009-06-04 17:45:33

1

你试过这个吗? DuplexHttpBinding

它使用封装为自定义WCF绑定的智能轮询技术。所以它应该可以开箱即用。

-1

您可以在启用防火墙的客户端上访问客户端以访问双工Web服务进行以下更改。

  • 集WebHttp选项防火墙检查 - >高级 - >设置(网络连接设置) - > Web服务器(HTTP)
+0

在客户防火墙中进行更改不是一种选择。而且他们可能有一个硬件防火墙,在这种情况下,它仍然会失败。 – Sire 2010-03-23 14:48:20