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

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

要求:

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

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

WCF通过防火墙和NAT

在IIS中保持连接打开

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

===============>>#1 票数:4 已采纳

我找到了几个解决方案:

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

RemObjects Commercial,主动开发,支持所有功能,但似乎没有GenuineChannel使用的所有更高级的功能。

GenuineChannels 它使用具有许多很好添加功能的远程处理,最重要的一个是通过NAT工作而无需打开客户端防火墙。 不幸的是,似乎已经死了。

另一种解决方案是根据本文使用与IIS的流式传输: 在IIS中保持连接打开

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

我没有时间去试验这个,我还没有找到一个样本,说它专门解决了防火墙问题,但这里有一个很好的样本可能有效: Streaming XML

===============>>#2 票数:2

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

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

如果客户端和服务器都可以直接寻址并且防火墙不是问题,那么您是否考虑过允许客户注册提供支持合同的URL。 然后,服务器可以在需要时调用此服务,而无需建立长时间运行(但主要是空闲连接),避免心脏跳动的需要,并且可以跨会话\\连接使其具有弹性。

===============>>#3 票数:1

你试过这个吗? DuplexHttpBinding

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

===============>>#4 票数:1

我没有尝试过你说的场景,所以我不能帮助太多,抱歉。 如果您需要绕过的只是客户端防火墙,您可能需要查看此帖子

祝好运。

===============>>#5 票数:1

在大多数防火墙设置中,如果TCP连接处于空闲状态以节省资源,则它将被防火墙拆除。 空闲超时可能不是您可以控制的。 如果他们闲置并且资源限制受到打击,有些人会将其拆除。

大多数公司环境都不允许任何计算机进行出站TCP连接。

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

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

所以你尝试过使用Toredo吗? 读过它会出现在那里,用户设置太复杂了。

===============>>#6 票数:-1

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

  • 在防火墙 - >高级 - >设置(网络连接设置) - > Web服务器(Http)中选中设置WebHttp选项

  ask by Sire translate from so

未解决问题?本站智能推荐: