如何记录WCF消息内容?
我认为这很简单,但我看不出如何告诉WCF记录邮件正文。我有:
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Verbose">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EntLibLoggingProxyTraceListener,Microsoft.Practices.EnterpriseLibrary.Logging"
name="traceListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true"
logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" />
</diagnostics>
...etc..,
...etc...
</system.Model>
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
<listeners>
<add fileName="_trace-xml.log"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.XmlTraceListenerData,Microsoft.Practices.EnterpriseLibrary.Logging"
traceOutputOptions="None"
type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.XmlTraceListener,Microsoft.Practices.EnterpriseLibrary.Logging"
name="XML Trace Listener" />
...etc... other listeners
</listeners>
...etc...
</loggingConfiguration>
但我所记录的是关于消息,而不是消息正文的东西。我需要更改日志消息内容?
如果你需要消息体,你必须以编程方式自己捕捉它们。使用服务行为在IDispatchMessageInspector或IClientMessageInspector实现中安装消息检查器并捕获消息。
就跟随这说明完美的作品对我来说:http://msdn.microsoft.com/en-us/library/ms730064.aspx
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics>
</system.serviceModel>
无需编写任何代码,这个...
如果我这样做,我会得到关于WCF正在做什么的大量信息,但是没有任何有关消息的内容: –
这很奇怪。你可以发布你的svcviewer.exe加载了messages.svclog并显示消息标签内容的屏幕截图吗? – kroonwijk
我发现了一个版本的问题。当WCF服务项目针对.Net 3.5构建时,我在查看器工具中看到了完整的消息主体。针对.Net 4.0构建,我没有看到消息正文。
啊啊,真让人气愤!这似乎是它!其中一个“当出现问题时你只需要它”。 –
给在.NET 4.0上遇到麻烦的人。注意, 跟踪是: '' 消息是: '' HTTP://计算器.COM /问题/ 11264260/WCF-如何-DO-I-跟踪消息体 –
尝试http://www.csharptutorial.in/12/csharp-net-wcf-how-to-enable-wcf-tracing-and-messagelogging并设置logMessagesAtTransportLevel =“true”。在您的日志文件中,您可以找到<s:Body>
标签。调查他们附近的文字。稍后,您可以添加新的“XmlListener”,并以更灵活的格式查找消息正文。
唉。所以做这样的博客http://wcfpro.wordpress.com/2011/03/29/iclientmessageinspector/给我*一切*我需要或有更多的,我需要知道在配置或代码来记录消息体? –
该链接几乎是你需要的一切。它唯一没有显示的是如何安装端点行为,这非常简单(endpoint.Behaviors.Add)。 – JohnC
这个答案是错误的。为'System.ServiceModel.MessageLogging'配置一个源,并且一个监听器记录这些消息对我来说工作正常。没有必要的信息检查员。 –