背景:
我排除问题,其中通过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来帮助跟踪消息的生命周期。队列计数器,系统计数器等应该能够看到各种传出队列和目标队列随着消息流经它们而上下移动。缺少多少条消息? –