4.0 / WCF:双向消息总线的最佳方法?

时间:2010-04-20 11:18:51

标签: wcf message-queue

只是技术更新,现在.NET 4.0已经用完了。

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

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

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

我希望尽可能少的延迟和尽可能少的改变。

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

  • WsDualHttp怎么样?特别是在NAT场景下?

正如笔记:轮询最有可能出来 - 这里的主要问题是我会有很大的开销或显着的延迟,两者都不是真的想要的。从技术上讲,我会喜欢某种流媒体appraoch,服务器可以在生成它们的同时将乱码写入流中,并在它们到来时将它们发送给客户端。不过,这对WCF来说是不可行的(如果没有,我可能会真正决定在WCF之外处理整个消息部分,只是通过WCF进行控制/登录/设置/销毁)。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我会使用Windows Azure Service Bus。请参阅以下问题中的答案:

WCF, 4.0, Bidirectional

答案 2 :(得分:0)

看看Windows AppFabric,开始的好地方是Here。它从根本上将WCF和WF包装到应用程序服务器中,通过WAS支持WCF激活。它是我举办此类应用程序的地方。它提供全双工连接,客户端和服务器之间的p2p或会话。不要将Windows appfabric与Azure appfabric混淆,(以前称为Azure Service Bus)。

关于上面的绑定,NetTcpBinding和WsDualHttp都提供回调,但ws绑定你得到了很多现金,特别是如果它是一个混合编程环境,你必须压扁wsdl才能进行互操作。我也认为WsDual在路由器遍历上更容易,虽然我理解与朋友交谈,Windows AppFabric使用新的中继服务减轻了这一点(我没有看到,我认为现在已经重命名)。

希望有所帮助。