【问题标题】:.NET client-server communication over unreliable network.NET 客户端-服务器在不可靠网络上的通信
【发布时间】:2011-08-20 07:56:31
【问题描述】:

我正在开发最有可能使用 WPF 开发的新 RIA。此应用程序将通过不可靠的网络(例如 3G)与 Web 服务进行通信。

如何在以下场景中实现可靠通信 -

  1. “创建”操作成功 在服务器/WebService 上(比如说一个新的 记录已创建)但响应 包含记录标识符 无法返还给客户 申请。

  2. 处理付款,这应该是 原子操作

带 WCF 的 MSMQ 是这里的最佳选择,还是有已知的策略和模式可以在不使用消息传递框架的情况下在不可靠的网络(例如 3G)上实现可靠性?

【问题讨论】:

    标签: wcf web-services msmq


    【解决方案1】:

    可以通过 HTTP 使用 MSMQ,但如果使用开源 RabbitMQ queuing framework 会更好。它还包括一个 WCF 绑定,您应该能够将其用于您的方案。带有 MSMQ 的 WCF 非常适合在防火墙内部使用,但它并不是为 Internet 设计的。

    【讨论】:

    • 在这种情况下,是什么让 RabbitMQ 成为比 MSMQ 更好的选择?
    • 简短的回答是,RabbitMQ 被设计为使用 HTTP 作为其本机传输之一,而 MSMQ 被设计为使用专有的二进制传输。 MSMQ 后来被 Microsoft 调整为通过 HTTP 工作,但开箱即用的 WCF 绑定不支持此功能(netMsmqBinding 不能通过 HTTP 工作)。 RabbitMQ 提供了一个 WCF 绑定,可让您通过 HTTP 进行消息传递。 RabbitMQ 甚至受到 Amazon EC2 云服务的支持,因此您知道它可以在 Internet 上运行。我想这不是一个太短的答案...... :)
    • 更新我的评论 RabbitMQ 的本机传输是 TCP,并且有一个实验性的基于 HTTP 的传输正在工作。很抱歉造成混乱。
    • 感谢您提供详细信息。非消息传递框架是否是一个值得探索的选项?
    • 非消息传递框架基本上是具有 wsHttpBinding 和 Reliable Messaging enabled. 的常规 WCF 服务。这种模式是“可靠的”,但它提供有保证的消息传递,即使服务已关闭。使用 RabbitMQ 和 MSMQ,消息传输和处理在传输层完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多