我正在运行一个WCF客户端,它通过MsmqBinding调用WCF服务. 框架是.Net 4.0,客户端和服务器在 Windows Server 2008 R2上运行. 通道队列是事务性的. 该服务使用以下绑定参数进行托管: receiveErrorHan
框架是.Net 4.0,客户端和服务器在 Windows Server 2008 R2上运行.
通道队列是事务性的.
该服务使用以下绑定参数进行托管:
receiveErrorHandling = “移动”
receiveRetryCount = “3”
retryCycleDelay = “00:00:20”
maxRetryCycles = “5”
鉴于((ReceiveRetryCount 1)*(MaxRetryCycles 1))生效,这将导致
4 * 6 =在将任何给定消息移动到毒性子队列之前重试24次.
将IErrorHandler附加到我的服务我注意到在wcf子系统最终将消息移动到; poison subqueue之前,调用HandleError时,MsmqPoisonMessageException共计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
重试次数当然是您参数的结果;但是在IErrorHandler中,您可以自己将消息显式移动到毒性队列.否则,它将始终根据您的绑定参数移动,并通过像任何其他队列一样侦听毒性队列来检测.