我们有一个解决方案,我们使用 Windows 服务来挑选消息。
Windows 服务每 2 分钟触发一次,并检索 MSMQ 消息以将其传递给 Web 服务。
- 我可以创建一个 WCF 服务,它会自动从 MSMQ 队列中提取消息吗?
- 如果 WCF 服务支持自动调用,我可以避免使用 Windows 服务吗?
Q1:你可以自动从 MSMQ 中获取消息,你需要查看 netmsmqbinding,但是有一些设计考虑你必须考虑,如果你习惯了原生 MSMQ,你知道你有能力偷看消息。但是,当您使用 WCF 时,您就失去了窥视的能力。WCF 将拦截 MSMQ 中的消息,您负责保持 WCF 服务和窥视应用程序同步。您还需要查看是否需要事务性队列或非事务性队列,并且必须基于此修改绑定。
Q2:您需要将 WCF 服务托管在 windows 服务或 IIS7 中。如果您在 IIS7 中托管,请查看启用 MSMQ WAS 侦听器
这是一篇不错的文章:http: //blogs.msdn.com/tomholl/archive/2008/07/12/msmq-wcf-and-iis-getting-them-to-play-nice-part-1.aspx
将消息从 MSMQ 传输到 Web 服务调用的一种方法是使用支持相同协定的 netMsmqBinding 服务端点和 basicHttpBinding 客户端端点。netMsmq 服务将自动从队列中抓取消息并将它们反序列化为一个对象。在您的 netMsmq 服务实现中,只需实例化您的 basicHttp 客户端代理并调用相同的方法。基本上是从 Web 服务到 MSMQ 的传递或代理模式,反之亦然。在 Juval Lowy 的“Programming WCF”中,他称这种模式为队列的“HTTP Bridge”。