背景:
我排除問題,其中通過WCF在交易MSMQ發送(與netMsmqBinding)消息似乎消失了。使用WCF的代碼位於我無法更改的第三方程序集中。我幾乎沒有什麼線索來解決問題,但計劃啓用各種跟蹤功能,以便確定問題所在。歸屬關係MSMQ端至端跟蹤與WCF跟蹤和應用級日誌
語境:
我已經啓用MSMQ End-to-End Tracing。它爲發送的每條消息記錄兩個事件。
- 將消息寫入傳出隊列時的一個事件。此消息包含MSMQ消息ID(由guid和整數組成,即7B476ADF-DEFD-49F2-AF5A-0CF27C5152C0 \ 6481271)。
- 該消息通過網絡發送時的另一個事件。
我已啓用詳細WCF Tracing。
我也有應用程序級別的日誌記錄,記錄應用程序代碼定義的消息ID(我們稱之爲「應用程序消息ID」)。
我在發送的MSMQ消息上啓用了正面和負面源日誌記錄。
我已在接收隊列上啓用日記功能。
問題:
當消息就消失了,我知道缺少的消息的應用程序ID(它是由發送端登錄)。我現在想看看端到端跟蹤,看看 消息是否寫入了傳出隊列。
如何關聯端到端跟蹤中的事件與應用程序級日誌和WCF跟蹤?
想法:
發送時使用System.Messaging託管MSMQ API一個MSMQ消息,發送消息後,消息的MSMQ ID是可用的。但是,在WCF執行發送操作時,我還沒有找到記錄此方法的方法。 WCF跟蹤記錄了一個MSMQMessageId guid,但是這個值令人驚訝的不像我猜測的那樣是實際的MSMQ id。 是否可以訪問實際的MSMQ消息ID並記錄它?
在應用程序日誌中記錄本機線程ID以及應用程序級別ID和時間戳。本地線程ID由MSMQ記錄到端到端跟蹤,因此這可能實際上足以進行關聯。如果我沒有找到更優雅的解決方案,這對我來說就是B計劃。
你檢查了[死信](http://msdn.microsoft.com/en-us/library/ms789035.aspx)隊列嗎? –
是的,我做過了。它是空的。 –
我喜歡使用perfmon來幫助跟蹤消息的生命週期。隊列計數器,系統計數器等應該能夠看到各種傳出隊列和目標隊列隨着消息流經它們而上下移動。缺少多少條消息? –