也可以看看 WCF服务器如何告知WCF客户端的更改?更好 解决方案,然后进行简单的投票,例如评论或长轮询)

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

要求:

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

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

通过防火墙和 NAT 的 WCF

在 IIS 中保持连接打开

但我还没有找到有效的代码示例..我尝试将 Microsoft 的 WCF 示例中的“Duplex”和“TcpActivation”示例组合起来,但没有成功。请有人指出我可以使用的示例代码,或者构建一个小型示例应用程序。多谢!

有帮助吗?

解决方案

我找到了几个解决方案:

零度冰 GPL 与商业选项。只是测试得很快。看起来比 .NET Remoting 更强大,并且开发非常活跃。

Rem对象 商业化、积极开发,支持一切,但似乎不具备 GenuineChannels 使用的所有更高级的功能。

正版频道. 。它使用远程处理,并具有许多不错的附加功能,最重要的一个是它可以通过 NAT 工作,而无需打开客户端防火墙。不幸的是,似乎已经死了。

另一种解决方案是通过 IIS 使用流式处理,根据本文: 在 IIS 中保持连接打开

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

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

其他提示

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

您能提供一些您已经尝试过的示例吗?有防火墙等详细信息、错误消息吗?

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

在大多数防火墙设置中,如果 TCP 连接空闲,防火墙将断开 TCP 连接以节省资源。空闲超时可能不是您可以控制的。如果它们闲置并且达到资源限制,有些人会拆除它们。

大多数公司环境无论如何都不允许任何计算机建立出站 TCP 连接。

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

如果您必须在亚秒级区域(即,金融服务),然后考虑一些消息传递基础设施,例如客户端的 NServiceBus 分发器,但这需要客户安装...

那么您尝试过使用 Toredo 吗?读到它会出现在那里后,用户设置起来可能太复杂了。

我没有尝试过你所说的场景,所以我无法提供太多帮助,抱歉。如果您需要绕过的只是客户端防火墙,您可能需要检查一下 这个帖子.

祝你好运。

你试过这个吗?双工Http绑定

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

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

  • 在防火墙 -> 高级 -> 设置(网络连接设置) -> Web 服务器(Http)中选中设置 WebHttp 选项
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top