WSDualHttpBinding - 这需要两个基于SOAP的HTTP监听器,一个在服务器上,一个在客户端上。当客户端想要联系服务器时,它会向服务器执行HTTP请求。当服务器想要联系客户端时,它会向客户端执行HTTP请求。这种方法的优点是任何网络连接都是短暂的,并且不会保持打开(与大多数HTTP连接不同),因此可以支持大量并发客户端。主要缺点是它可能无法与大多数互联网上的客户端计算机配合使用,因为它们通常位于NAT后面(对于Internet上的服务器到服务器通信或任何局域网或LAN内部的通信而言,这不是问题)。有关更多详细信息,请参见我的其他答案。
NetTcpBinding - 这基本上是从客户端到服务器打开一个套接字,并将其保持打开状态,直到会话结束。即使在NAT上也允许双向通信,但由于必须保持连接打开,因此对服务器的负担略微增加,因此将能够支持较少的并发用户(但在大多数情况下仍然足够)。这是我首选在WCF上执行双工合同的方式,因为更容易使用且更可靠。
你应该了解一下Frozen Mountain的WebSync。我过去使用它并取得了很好的效果。它能够满足你所有的需求。他们甚至提供托管服务“WebSync on Demand”。 他们也提供免费产品(但最多只支持10个并发用户)。 这是一个商业产品。如果你不想自己做所有的工作,WebSync为你提供了现成的API,你可以直接开始使用并快速上手。 我听说/读过SignalR,但还没有使用过,而SignalR似乎还处于alpha/beta阶段,而WebSync则非常成熟。
这个问题很有趣。
我们目前正在开发一个与多个Web服务交互的应用程序。其中一个要求是每个客户端都必须知道其他客户端进行的操作。
为了实现这一点,我们考虑创建一个仅用于构建要通知的客户端列表并处理通知逻辑的Web服务,客户端在启动时注册该服务。正如您提到的那样,通知本身将使用回调来完成。
之所以使用完全独立的Web服务,是因为我们所有现有的服务都需要在每次调用时建立和断开连接。通过通知Web服务,连接必须保持,只要客户端在运行中。
很抱歉我不能提供更多帮助,因为我们正在开发这样的系统。我也对此主题的反馈感兴趣。
您可以创建一个 WCF 服务,让 WPF 客户端在启动时注册自己。然后每个 WPF 客户端都可以与 MSMQ 或 RabbitMQ 服务器通信,在那里它们将轮询基于客户端名称/唯一 ID 创建的自己的队列。在服务器端,您可以拥有一个服务,根据为每个客户端设置的条件,在数据可用时将数据推送到队列中。