WCF服务器如何通知WCF客户端有关更改? (更好的解决方案然后是简单的轮询,例如Comet或长轮询)

时间:2009-11-09 13:14:39

标签: .net wcf design-patterns comet long-polling

  

另见“WCF push to client through firewall

我需要一个连接到WCF服务器的WCF客户端,然后当服务器上的某些数据更改时,客户端需要更新其显示。< / p>

因为客户端和服务器之间可能存在防火墙。

  • 所有通讯必须通过HTTP
  • 服务器无法对客户端进行(物理)拨出电话。

当我正在编写客户端和服务器时,我不需要将解决方案限制为仅使用soap等。


我正在为“long polling”/“Comet”等寻找内置的支持


感谢Drew Marsh提供的关于如何在WCF中实现长轮询的最丰富的答案。但是我认为WCF的主要“卖点”是你可以通过配置在配置文件中使用的通道来做这种事情。 E.g我想要一个逻辑上只有两个但只是物理传入的频道。

5 个答案:

答案 0 :(得分:49)

答案 1 :(得分:2)

如果服务器可以与服务总线建立传出连接,则可以进行一种回调。这样,客户端/服务器根本不需要了解彼此,只需依赖服务总线。见.NET Service Bus

您需要查看WSDualHttpBinding

<击>   

WSDualHttpBinding提供了   对Web服务协议的相同支持   作为WSHttpBinding,但用于   双工合同。 WSDualHttpBinding   仅支持SOAP安全性和   需要可靠的消息。这个   绑定要求客户端有一个   提供回调的公共URI   服务的端点。这是   由ClientBaseAddress提供。一个   双重绑定暴露了IP地址   客户到服务。客户端   应该使用安全性来确保它   只连接到它信任的服务。   

答案 2 :(得分:2)

虽然不是WCF,但您可以尝试使用XMPP来实现该功能。关于它和其他系统的InfoQ有一篇文章。虽然文章指出XMPP不能通过HTTP使用,但您可以在使用BOSH

时使用

有一些.NET库可用agsXMPP来命名。

我工作的公司开始使用它将更新通知推送到应用程序,以刷新部分用户界面。

答案 3 :(得分:1)

Google for“WCF duplex”。我已成功使用netTcpBinding(跨大洲),但我不确定basicHttpBinding。

但是,它确实需要服务器回调客户端。如果不允许服务器执行此操作,则轮询可能是您唯一的选择......

答案 4 :(得分:0)

如果服务器无法调用客户端(通常不应该),则应让客户端按指定的方式轮询服务器。 因为你已经有了WCF基础,所以只需添加一个操作。