我正在解决WCF通过事务MSMQ(带netMsmqBinding)发送的消息似乎消失的问题.使用WCF的代码是在第三方程序集中,我无法更改.我几乎找不到问题的线索,但计划启用各种跟踪功能,以便确定问题所依赖的位置.
我启用了MSMQ 端到端跟踪.它为每个发送的消息记录两个事件.
我启用了详细的WCF跟踪.
我还有应用程序级别的日志记录,它记录由应用程序代码定义的消息ID(让我们称之为"应用程序消息ID").
我已经在发送的MSMQ消息上启用了正面和负面源日记功能.
我已在接收队列上启用了日记功能.
当消息丢失时,我知道丢失消息的应用程序ID(它由发送方记录).我现在想看一下End-to-End跟踪,看看消息是否写入了传出队列.
如何将端到端跟踪中的事件与应用程序级别日志和WCF跟踪相关联?
在System.Messaging中使用托管MSMQ API发送MSMQ消息时,消息的MSMQ ID在发送消息后可用.但是,当WCF执行发送操作时,我还没有找到记录此方法的方法.WCF跟踪记录了一个MSMQMessageId guid,但令人惊讶的是,这个值并不是我猜想的实际MSMQ id.是否可以访问实际的MSMQ消息ID并记录它?
在应用程序日志中记录本机线程ID以及应用程序级别ID和时间戳.MSMQ将本机线程ID记录到端到端跟踪中,因此实际上这可能足以进行关联.如果我找不到更优雅的解决方案,这是我的计划B.
我们正在使用msdeploy(或Web部署,如果您愿意)打包和部署Web应用程序.通过声明参数包时间,我们可以在部署时提供值(以替换连接字符串等).
我们目前面临的问题是替换我们的Web配置中的applicationSettings部分中的值.我们不能让msdeploy替换值,因为我们要替换的内容是xml元素中的文本,而不是属性值(我们得到的警告是:"无法在节点类型'Element'上设置值").
相关配置如下所示:
<applicationSettings>
<Name.Of.Assembly.Properties.Settings>
<setting name="someSetting" serializeAs="String">
<value>I wanna be replaced</value>
</setting>
</Name.Of.Assembly.Properties.Settings>
</applicationSettings>
Run Code Online (Sandbox Code Playgroud)
而declare参数xml如下所示:
<parameter name="XX" defaultValue="default">
<parameterEntry kind="XmlFile"
scope="Web\.config$"
match="/configuration/applicationSettings/Name.Of.Assembly.Properties.Settings/setting[@name='someSetting']/value" />
</parameter>
Run Code Online (Sandbox Code Playgroud)
msdeploy只支持替换属性值还是我做错了什么?