我正在开发 WCF 客户端-服务器应用程序。其中客户端必须不断与服务器同步(至少每 10 秒)。目前我正在轮询服务器以查看是否有任何更改。如果是这样,更改(有时是数十条数据库记录)将被拉到客户端。
我的设计感觉有点笨拙,所以我研究了 gtalk(和其他 XMPP)客户端如何保持同步。据此Wikipedia article ,XMPP 放弃了轮询方法,现在仅使用 HTTP 绑定(bind)。
我认为可以为 WCF 做同样的事情。我认为现在 99% 的 WCF 应用程序只是 1) 打开连接,2) 执行事务,3) 关闭连接。
所以我的问题是:
- 有谁知道一个例子 如何实现这样的 异步绑定(bind)方法 WCF?
- 这有什么影响 取决于服务器的客户端数量 可以容纳,因为多个 连接必须是 保持。
- 还有其他缺点吗?
最佳答案
这种异步方法可以通过双工绑定(bind)来实现。 WCF 提供了 WSDualHttpBinding,它由两个相关的 http 传输组成。第一个是从客户端到服务器,第二个是从服务器到客户端。方法是在通信开始时从客户端调用服务器。服务器存储客户端回调 channel 并在需要时使用它来推送更新。这可以进一步扩展到完整的发布订阅消息交换模式。
默认情况下,服务器必须为每个连接的客户端代理(每个 session )维护服务实例。您必须正确设置服务限制以允许许多客户端的连接。对服务器和客户端数量的影响取决于服务实现。
WSDualHttpBinding 有局限性。例如 - 不允许传输安全 - 只能使用消息安全,不允许流式传输,需要可靠的 session 等。实现中存在一些陷阱,例如长时间不活动的超时或导致 channel 故障的未处理异常。
关于.net - WCF 客户端-服务器同步 : Polling vs. 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3393352/