【问题标题】:WCF - NetMsmqBinding vs NetTcpBindingWCF - NetMsmqBinding 与 NetTcpBinding
【发布时间】:2016-05-17 14:00:25
【问题描述】:

我正在阅读这篇文章http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx 来选择绑定选项。

我对

的含义有一个不寻常的疑问

离线或断开交互,选择NetMsmqBinding

这是否意味着即使服务没有运行,客户端仍在使用该服务?

你能分享一些实时的例子吗?

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    这两个绑定完全不同。

    • NetTcpBinding 可以被认为是一种 MS 专有格式(通常是二进制),在概念上类似于 RPC(例如,可用于替换 .NET Remoting)。它是同步的,即客户端和服务器必须同时在线,并且客户端(几乎)立即收到响应。

    • MSMQ 是 Microsoft 的面向消息的中间件解决方案,它围绕异步队列展开 - 例如如果客户端发送消息时目标服务器处于脱机状态,则消息将在客户端排队,直到服务器重新联机。每个队列只是一种方式,尽管可以通过从服务器到客户端的第二个队列来实现双向通信。发送 WCF MSMQ 消息需要在客户端上安装 MSMQ 服务。队列中的消息可以有一个传递“超时”,否则将被放置在适用的死信队列中。

    现实世界的例子:

    • 我会使用带有二进制序列化的NetTcpBinding 来满足 Microsoft WCF 客户端和服务器之间的高性能、同步通信需求,例如在Xml 没有用处的地方上传文件、媒体等(否则,我将使用wsHttpBinding 同步Xml / SOAP 消息传递)
    • 我会在启用 DTC 的情况下使用 MSMQBinding,以确保 2 个或多个系统(例如财务)之间的可靠消息传递,其中至少一个端点位于 .Net 和“兼容”服务器(不一定是 WCF ,例如BizTalk,或其他具有MSMQ 适配器的EAI 集线器或ESB 总线,例如MSMQ and MQSeries 之间存在桥接)。消息通常采用Xml 格式。

    TL;DR

    这是否意味着即使服务没有运行,客户端仍在使用该服务

    是的。如果MSMQ在本地运行,客户端会立即得到返回成功响应(表示消息已经排队)。但这并不意味着服务器已成功接收到消息。

    【讨论】:

    • 很好的答案,我在许多复杂系统中广泛使用了 WCF,只是想加两分钱。 1. 避免默认使用 WCF,除非它提供了 RESTful Web 服务所缺乏的某些特定用例; 9/10 倍的 WCF 头痛不值得奖励。 2. NetTcpBinding 可以说是我个人经验中最好的(而且绝对是最快的——不包括命名管道)绑定选项。然而,正如海报所解释的那样,它没有任何内置的冗余。
    • 同意 - 已经 4 年了,xml 现在大部分被 JSON 服务取代,WebApi 现在已经在 RESTful 世界中取代了 WCF。
    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2011-06-15
    • 1970-01-01
    • 2013-11-19
    • 2011-07-23
    相关资源
    最近更新 更多