WCF push to client through firewall?
我需要通过客户端防火墙在WCF中使用推送技术。这肯定是一个常见的问题,我知道它在理论上是可行的(请参阅下面的链接),但是我无法使其正常运行,而且我还找不到能够证明它的代码示例。 要求:
解决方案似乎是双工netTcpBinding。根据此信息: 通过防火墙和NAT的WCF 在IIS中保持连接打开 但是我还没有找到一个有效的代码示例。我尝试将Microsoft的WCF示例中的" Duplex"和" TcpActivation"示例组合在一起,但没有任何运气。请有人指出有效的示例代码,或构建一个小型示例应用程序。非常感谢! 我找到了几种解决方案: 具有商业选项的ZeroC Ice GPL。只经过快速测试。看起来比.NET Remoting更强大,并且非常活跃。 RemObjects Commercial,活跃的开发,支持所有功能,但似乎不具备GenuineChannels使用的所有更高级的功能。 正版频道。它使用具有许多不错的附加功能的远程处理,最重要的一项是它可以通过NAT进行工作而无需打开客户端防火墙。不幸的是似乎已经死了。 根据本文的说法,另一种解决方案是将流与IIS一起使用:保持IIS中的连接打开 客户端在端口80上与服务器建立第一个连接(带有IIS6的http,带有IIS7的tcp),然后该连接保持打开状态,并且流响应永无止境。 我还没有时间尝试这一点,也没有找到一个可以专门解决防火墙问题的示例,但是这里有一个很好的示例可能有效:流XML。 您是否尝试过查看:http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx 您能提供您已经尝试过的例子吗?有关防火墙等的详细信息,错误消息? 如果可以直接解决客户端和服务器的问题,并且防火墙不是问题,那么您是否考虑过允许客户端注册提供受支持合同的URL。然后,服务器可以在需要时调用此服务,而无需建立长期运行(但主要是空闲的连接),从而避免了心脏跳动的需要,并且可以使整个会话/连接具有弹性。
你试过这个吗? 它使用封装为自定义WCF绑定的智能轮询技术。因此,它应该开箱即用。 抱歉,我没有尝试过您所说的情况,所以我不能提供太多帮助。如果您只需要绕过客户端防火墙,则可能需要查看此帖子。 祝好运。 在大多数防火墙设置中,如果TCP连接空闲以节省资源,则TCP连接将被防火墙断开。空闲超时可能不是您可以控制的。如果它们闲置并且正在达到资源限制,则某些服务器将拆除它们。 大多数公司环境始终不允许任何计算机建立出站TCP连接。 同样,使用这种机制意味着您将遇到扩展问题。我认为更可靠的解决方案是将信息排队,并让您的客户定期对其进行轮询。如果可能,请使用缓存,以便随后的客户端轮询将从客户代理缓存(如果他们正在使用的话)中获取缓存的数据。 如果您必须在亚秒级范围内(即金融服务)及时推送数据,请考虑一些消息传递基础架构,例如客户端的NServiceBus分销商,但这将需要客户安装... 那么,您是否尝试过使用Toredo?读过它似乎会出现的地方后,用户设置起来就太复杂了。 您可以在客户端中进行以下更改,以访问启用了防火墙的客户端上的双工Web服务。
|