【问题标题】:4.0/WCF: Best approach for bi-idirectional message bus?4.0/WCF:双向消息总线的最佳方法?
【发布时间】:2010-05-11 04:13:09
【问题描述】:

现在 .NET 4.0 已经发布,只是技术更新。

我编写了一个应用程序,它通过基本上是消息总线(而不是方法调用)与服务器通信。这是基于应用程序的内部架构(多线程,传递消息)。

从客户端到服务器的消息数量有限,从服务器到客户端的消息要多得多。其中大部分可以通过单独的专门机制处理,但最后我们谈到每秒可能有 10-100 条小消息从服务器发送到客户端。

客户端应该在“互联网条件”下运行。这意味着可能是标准 NAT 设备(即典型的 DSL 路由器)后面的家庭最终用户 - 不能假设有防火墙安全因此“开放”的网络。

我希望尽可能少的延迟和通信开销。

处理消息总线回调的最佳技术方法是什么?如果需要发送某些内容,我可以定期调用服务器进行消息传递... ...但是我有哪些选择来处理从服务器到客户端的消息?

  • WsDualHttp 是如何工作的?尤其是在 NAT 场景下?

请注意:轮询很可能会退出 - 这里的主要问题是我会有很大的开销或很大的延迟,这两者都不是真正想要的。从技术上讲,我会喜欢某种流式方法,服务器可以在他生成消息时将消息写入流,然后在消息到来时将它们发送给客户端。不过,不确定这对 WCF 是否可行(如果不是,我可能会决定在 WCF 之外处理整个消息部分,并通过 WCF 进行控制/登录/设置/销毁)。

【问题讨论】:

  • 试试看“COMET”技术。这些通常涉及从客户端发送请求,然后让服务器保持套接字打开,直到它有响应。然而,大多数实现都关注事件的及时通知,而不是持续的更新流。

标签: wcf message-queue


【解决方案1】:

对于双向通信,最好的选择是 NetTcpBinding,而不是 http 绑定,如果它们可用的话。

这样做的好处是只需要客户端可以发起与服务器的连接。

【讨论】:

    【解决方案2】:

    我会选择 Windows Azure 服务总线。在以下问题中查看我的答案:

    WCF, 4.0, Bidirectional

    【讨论】:

      【解决方案3】:

      看看 Windows AppFabric,好的起点是Here。它从根本上将 WCF 和 WF 包装到一个应用程序服务器中,并通过 WAS 支持 WCF 激活。我将在其中托管此类应用程序。它在客户端和服务器之间提供面向全双工连接、p2p 或会话。不要将 Windows appfabric 与 Azure appfabric(以前称为 Azure 服务总线)混淆。

      关于上面的绑定,NetTcpBinding 和 WsDualHttp 都提供回调,但是 ws 绑定可以为您带来很多收益,特别是如果它是一个混合编程环境并且您必须扁平化 wsdl 以使互操作工作。我还认为 WsDual 在路由器遍历上更容易,尽管我理解与朋友交谈,Windows AppFabric 使用新的中继服务(我还没有看到,我认为现在已重命名)缓解了这一点。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-11
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多