WCF через MSMQ привязки. Как определить, когда сообщение перемещается в очередь отравления?

Я использую клиент WCF, который вызывает службу WCF через MsmqBinding. Framework.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 к моему сервису, я замечаю, что HandleError вызывается с MsmqPoisonMessageException в общей сложности 6 раз (для подозрительного сообщения), прежде чем подсистема wcf, наконец, переместит сообщение в;

Я хочу записать точное время, когда сообщение завершено, повторяется, и сообщение перемещается в очередь отравления. Мне кажется, что единственная возможность - подсчитать, сколько раз в сообщении возникли сбои, и сравнить это число с привязкой 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 ответа

Решение

Количество повторных попыток, конечно же, зависит от ваших параметров; однако в вашем IErrorHandler вы можете явно переместить сообщение в очередь отравлений самостоятельно. В противном случае он всегда будет перемещаться в зависимости от параметров привязки и будет обнаружен при прослушивании очереди отравления, как и любая другая очередь.

Существует ряд хороших решений для мониторинга, которые можно использовать для отслеживания очередей сообщений на предмет поступления сообщений. MonitorWang - это программа с открытым исходным кодом, которая может определять, когда сообщение поступило в подозрительное сообщение или очередь ошибок. Обнаружение, когда сообщение было получено в очереди ошибок, является более надежным, чем попытка определить, когда сообщение было отправлено в очередь ошибок.

Другие вопросы по тегам