通过 MSMQ 绑定的 WCF。如何检测消息何时移至毒害队列?

Cas*_*sen 5 wcf msmq msmqbinding

我正在运行通过 MsmqBinding 调用 WCF 服务的 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 子队列之前,总共使用 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

and*_*era 3

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