将MSMQ端到端跟踪与WCF跟踪和应用程序级日志记录相关联 背景:
我正在对WCF通过事务性MSMQ(使用netMsmqBinding)发送的消息似乎消失的问题进行故障排除。使用WCF的代码位于我无法更改的第三方程序集中。我对问题所在没有什么线索,但我计划启用各种跟踪功能,以确定问题所在的位置 背景:将MSMQ端到端跟踪与WCF跟踪和应用程序级日志记录相关联 背景:,wcf,msmq,Wcf,Msmq,我正在对WCF通过事务性MSMQ(使用netMsmqBinding)发送的消息似乎消失的问题进行故障排除。使用WCF的代码位于我无法更改的第三方程序集中。我对问题所在没有什么线索,但我计划启用各种跟踪功能,以确定问题所在的位置 背景: 我已启用MSMQ。它为每个发送的消息记录两个事件 将消息写入传出队列时发生的一个事件。此消息包含MSMQ消息id(由guid和整数组成,即7B476ADF-DEFD-49F2-AF5A-0CF27C5152C0\6481271) 通过网络发送该消息时发生的另一个
- 将消息写入传出队列时发生的一个事件。此消息包含MSMQ消息id(由guid和整数组成,即7B476ADF-DEFD-49F2-AF5A-0CF27C5152C0\6481271)
- 通过网络发送该消息时发生的另一个事件
- 在System.Messaging中使用托管MSMQ API发送MSMQ消息时,消息的MSMQ id在消息发送后可用。但是,当WCF执行发送操作时,我还没有找到一种方法来记录这一点。WCF跟踪记录一个MSMQMessageId guid,但令人惊讶的是,这个值并不像我猜想的那样是实际的MSMQ id是否可以访问实际的MSMQ消息id并进行记录?
- 在应用程序日志中记录本机线程id以及应用程序级别id和时间戳。本机线程id由MSMQ记录到端到端跟踪,因此这实际上可能足以关联。如果我找不到更优雅的解决方案,这就是我的B计划
收集日志文件,并将它们全部添加到SvcTraceViewer.exeWCF似乎正在丢弃您的邮件,因为它在某种程度上存在格式错误(即合同不匹配,超出了WCF邮件大小限制之一) 要捕获此错误,可以编写一个ErrorHander来审核这些错误。 下面是一个这样做的示例 如果您使用的是Win 2008 R2及更高版本,另一个选项是使用内置的毒药消息处理。这是给医生们的一封信 对于问题,要使用应用程序跟踪标识符进行端到端跟踪: 我将在消息头()中传递应用程序跟踪id 要在服务端审核消息头,我将使用WCF的
IOperationInvoker
拦截每个调用,并审核消息头中的id
这可以在流程的配置文件中配置,而无需更改第三方代码。一个如何实现调用程序以及如何在配置中设置调用程序的示例。您检查队列了吗?是的,我检查了。它是空的。我喜欢使用perfmon来帮助跟踪消息的生命周期。队列计数器、系统计数器等应能在消息流经时看到各种传出队列和目标队列上下移动。有多少信息丢失?偶尔会有一些信息“丢失”。您是否能够通过perfmon了解特定消息的情况?