WCF超过MSMQ绑定。如何检测邮件何时移动到毒性队列?

时间:2011-03-25 10:40:12

标签: wcf msmq msmqbinding

我正在运行一个WCF客户端,它通过MsmqBinding调用WCF服务。 框架是.Net 4.0,客户端和服务器在Windows Server 2008 R2上运行。 通道队列是事务性的。

使用这些绑定参数托管服务: receiveErrorHandling="Move" receiveRetryCount="3" retryCycleDelay="00:00:20" maxRetryCycles="5"

鉴于((ReceiveRetryCount + 1)*(MaxRetryCycles + 1))生效,这将导致 4 * 6 =在将任何给定消息移动到毒性子队列之前重试24次。

将IErrorHandler附加到我的服务我注意到在wcf子系统最终将消息移动到; poison subqueue之前,使用MsmqPoisonMessageException调用HandleError总共6次(对于有害消息)。

我想记录重试消息的准确时间,并将消息移动到毒性队列。在我看来,唯一的选择是计算某个消息出错的次数,并将此计数与绑定MaxRetryCycles进行比较。这是尴尬和错误。

我的问题是:

  • 我有什么办法吗? 最终检测到事件在哪里 wcf子系统移动消息 到毒药队列?

我的参考资料是: http://msdn.microsoft.com/en-us/library/aa395218.aspx

并且:http://consultingblogs.emc.com/simonevans/archive/2007/09/17/A-comprehensive-guide-to-using-MsmqIntegrationBinding-with-MSMQ-3.0-in-WCF.aspx

2 个答案:

答案 0 :(得分:3)

重试次数当然是参数的结果;但是在IErrorHandler中,您可以自己将消息显式移动到毒性队列。否则,它将始终根据您的绑定参数移动,并通过像任何其他队列一样监听毒性队列来检测。

答案 1 :(得分:3)

您可以使用许多良好的监控解决方案来观察消息到达的消息队列。 MonitorWang是一个开源的,可以检测消息何时到达有害消息或错误队列。检测错误队列中消息 的时间比尝试检测消息 发送 时更可靠strong>到错误队列。