关于.net:使用MSMQ绑定使WCF服务异步

Making WCF service async using MSMQ bindings

有人对异步WCF端点有经验吗?

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

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

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

我的另一种选择是使用TIBCO商业作品和ems,但试图了解更好的东西,并且如果简单的WCF可以同步或异步工作,只需将绑定从netTCP更改为MSMQ...。 >

谢谢!


您必须区分异步和已排队。

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

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

使用队列的主要两个问题是:

  • 所有消息传递都必须是OneWay,因此如果客户端需要一种方法来知道处理是否成功,则必须将其设计到解决方案中
  • 队列故障语义与标准服务故障非常不同。需要检查死信队列和带毒消息队列中是否有未处理的消息-同样,您还需要在解决方案中进行设计

  • 如果您希望与Tibco EMS等效,则WCF支持的现成的唯一类似功能是MSMQ。如果您已经拥有Tibco EMS基础结构,但仍希望使用WCF,则可以将这两者结合使用,因为Tibco为WCF提供了EMS绑定(我从未测试过,但是我在客户的下载页面上看到了它)。