2011-03-25 50 views
4

我正在運行一個WCF客戶端,通過MsmqBinding調用WCF服務。 Framework是.Net 4.0,客戶端和服務器在Windows Server 2008 R2上運行。 通道隊列是事務性的。WCF通過MSMQ綁定。如何檢測郵件何時移至毒性隊列?

服務託管與這些結合參數: receiveErrorHandling="Move" receiveRetryCount="3" retryCycleDelay="00:00:20" maxRetryCycles="5"

鑑於((ReceiveRetryCount + 1)*(MaxRetryCycles + 1))中的效果,這將導致 4 * 6 = 24個的重試在將其移至毒性子隊列之前的任何給定消息。

將IErrorHandler附加到我的服務我注意到,在wcf子系統最終將消息移動到;毒性子隊列之前,HandleError總共調用了6次(對於有毒消息)的MsmqPoisonMessageException。

我想記錄消息完成重試並將消息移動到毒性隊列的準確時間。在我看來,唯一的選擇是計算特定消息出錯的次數,並將該計數與綁定的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

+0

編輯。 NM,原本在綁定中錯過了那3個。 – andrewbadera 2011-03-25 10:53:47

+0

所以簡短的答案是:我無法檢測到這一舉動。本來希望有一些vcf伏都教;) – 2011-03-26 23:49:16

回答

3

重試次數當然是你的參數的結果;然而在你的IErrorHandler中,你可以明確地將消息移動到毒性隊列中。否則,它將總是根據綁定參數移動,並且會像其他任何隊列一樣偵聽毒性隊列來檢測它。

3

有許多很好的監控解決方案,您可以用來觀看郵件到達消息隊列。 MonitorWang是一個開源的程序,可以檢測消息何時到達有毒消息或錯誤隊列。當檢測到的消息一直在錯誤隊列中接收比試圖檢測時,消息已經發送到錯誤隊列更加可靠。