代码之家  ›  专栏  ›  技术社区  ›  Sire

WCF通过防火墙推送到客户端?[关闭]

  •  9
  • Sire  · 技术社区  · 17 年前

    另请参见 How does a WCF server inform a WCF client about changes? (Better solution then simple polling, e.g. Coment or long polling)

    我需要通过客户端防火墙将推送技术与WCF结合使用。这一定是一个常见的问题,我知道它在理论上是可行的(见下面的链接),但我没能让它工作,也没能找到一个演示它的代码示例。

    要求:

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

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

    WCF through firewalls and NATs

    Keeping connections open in IIS

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

    6 回复  |  直到 8 年前
        1
  •  5
  •   Sire    10 年前

    我找到了几个解决方案:

    ZeroC Ice GPL具有商业选项。只是测试得很快。看起来比。NET Remoting,并且开发得非常积极。

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

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

    根据本文,另一种解决方案是在IIS中使用流媒体: Keeping connections open in IIS

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

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

        2
  •  2
  •   marcj    16 年前

    你试过看: http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

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

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

        3
  •  1
  •   user1010 user1010    17 年前

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

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

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

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

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

        4
  •  1
  •   Community CDub    8 年前

    我还没有尝试过你所说的场景,所以我帮不了什么忙,对不起。如果你只需要绕过客户端防火墙,你可能想检查一下 this post .

    祝你好运。

        5
  •  1
  •   chenz    15 年前

    你试过这个吗? DuplexHttpBinding

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

        6
  •  -1
  •   RockWorld    15 年前

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

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