WCF через MSMQ привязки.Как определить, когда сообщение перемещается в очередь отравлений? - PullRequest
4 голосов
/ 25 марта 2011

Я использую клиент 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 ]

3 голосов
/ 25 марта 2011

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

3 голосов
/ 25 марта 2011

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

...