WCF服务不读取队列中的消息

时间:2015-01-06 19:37:25

标签: wcf msmq msmq-wcf

我有一个从消息队列中读取的WCF服务。我注意到,在我们的最新部署中,队列中有一条未被读取的消息。 WCF服务已启动并正在运行,它正在建立与队列的连接(或者我会收到并发生错误)。

我们最近对我们的代码进行了一些更改,我们想知道这可能是相关的。我们似乎很奇怪,服务将运行,但消息未被读取。至少,如果队列中存在格式错误的消息,我希望WCF会抛出某种错误。

我查看了邮件的属性,它说没有移动,所以我不认为它被发送到重试子队列。它只是坐在那里,服务不会读它。

是否存在WCF忽略队列中的消息的情况? WCF如何处理格式错误的消息?

很抱歉,如果这还不是很多信息。在这一点上,我只是想了解阻止消息处理的原因。

2 个答案:

答案 0 :(得分:0)

这种情况似乎太奇怪了。 WCF什么都不做是没有意义的。

我最终决定尝试重新启动服务器上的MSMQ服务。一旦我这样做,我的服务立即收到消息,一切都重新开始。

我不知道这是否与Windows Update或其他服务器更改有关。我很高兴这很容易解决 - 这将是我将来尝试的第一件事。

答案 1 :(得分:0)

我们遇到过几个与WCF相同的问题。 MSMQ。一旦App Pool长时间闲置,由于某种原因WAS Listener停止工作。因此,WCF服务不会获取队列中的消息。

为了解决这个问题,我们在同一服务上公开了另一个合同,没有IsOneWay = true (因为此操作不会与队列交互)。然后创建一个Windows服务,在一段指定的时间间隔后ping WCF服务URL,这可确保WAS进程始终处于活动状态,并且一旦队列中有消息,WCF就会收到消息。这是一篇详细解释How to resolve MSMQ WCF issue for service deactivation的文章  

另外,确保http和& IIS上的应用程序启用了net.msmq协议。

使用Net.Msmq绑定实现WCF和MSMQ的分步指南的另一篇好文章 Setup MSMQ with WCF using Net.Msmq binding