我正在运行一个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进行比较。这是尴尬和错误。
我的问题是:
我的参考资料是: http://msdn.microsoft.com/en-us/library/aa395218.aspx
答案 0 :(得分:3)
重试次数当然是参数的结果;但是在IErrorHandler中,您可以自己将消息显式移动到毒性队列。否则,它将始终根据您的绑定参数移动,并通过像任何其他队列一样监听毒性队列来检测。
答案 1 :(得分:3)
您可以使用许多良好的监控解决方案来观察消息到达的消息队列。 MonitorWang是一个开源的,可以检测消息何时到达有害消息或错误队列。检测错误队列中消息 的时间比尝试检测消息 发送 >时更可靠strong>到错误队列。