【问题标题】:Making WCF service async using MSMQ bindings使用 MSMQ 绑定使 WCF 服务异步
【发布时间】:2023-07-02 01:02:02
【问题描述】:

有人使用过异步 WCF 端点吗?

我试图了解是否使用 MSMQ 绑定选项我可以进行设置,在该设置中,客户端知道必须将消息放入哪个队列,并且如果 wcf 服务(最终托管在 IIS 中)脱机,它也可以透明地工作或不响应。

我真的很想进行此设置,因为通过这种方式,当应用服务器重新上线(我们的分布式应用程序将拥有的众多应用服务器之一)时,它将处理队列中的所有传入消息并进行详细说明。

我更多地考虑那些有意义的延迟操作,例如消息管理(发送电子邮件)、日志服务(将日志条目写入数据库、事件日志或通过电子邮件发送)和类似的后端流程。

我的另一个选择是使用 TIBCO business works 和 ems,但试图了解什么更好,以及简单的 WCF 是否可以同步或异步工作,只需将绑定从 netTCP 更改为 MSMQ....

谢谢!

【问题讨论】:

    标签: .net wcf tibco


    【解决方案1】:

    您必须区分异步和排队。

    您可以使用基于客户端的异步调用、异步服务执行、OneWay 消息传递和双工或简单的 OneWay 消息传递与 NetTcpBinding 进行异步消息传递。

    但是,正如您所说,队列带来了额外的好处:弹性、负载均衡以及可扩展性(取决于 MSMQ 的版本)。

    您在使用队列时遇到的两个主要问题是:

    1. 所有消息传递都必须是 OneWay,因此如果客户需要知道处理是否成功的方法,您必须将其设计到您的解决方案中
    2. 队列故障语义与标准服务故障有很大不同。需要检查死信队列和有害消息队列中是否有未处理的消息 - 这也是您需要在解决方案中设计的内容

    【讨论】:

      【解决方案2】:

      如果您想要等效于 Tibco EMS,那么 WCF 支持的唯一类似的开箱即用功能是 MSMQ。如果您已经拥有 Tibco EMS 基础设施,但仍想使用 WCF,则可以将这两者结合起来,因为 Tibco 为 WCF 提供 EMS 绑定(我从未测试过,但我在客户的下载页面上看到了它)。

      【讨论】:

      • 谢谢,我也在读这个:*.com/questions/312612/…
      • 是的,我的同事正在直接使用 Tibco EMS .NET 库。 Spring.NET 中还支持 Tibco EMS。