如何记录WCF消息内容?

Chr*_*oll 22 .net wcf logging

在此输入图像描述

我认为这很简单,但我看不出如何告诉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>
Run Code Online (Sandbox Code Playgroud)

但我记录的只是关于消息的内容,而不是消息体.我需要更改为记录消息内容?

kro*_*ijk 35

只需按照此说明完美适合我: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>
Run Code Online (Sandbox Code Playgroud)

无需为此编写任何代码......

  • 如果我这样做,我会得到关于WCF正在做什么的大量信息,但没有关于消息内容的信息: (4认同)
  • 这有效.您可能希望增加maxSizeOfMessageToLog (3认同)

Joh*_*hnC 0

如果您需要消息正文,则必须自己以编程方式捕获它们。使用服务行为安装消息检查器并在 IDispatchMessageInspector 或 IClientMessageInspector 的实现中捕获消息。

  • 这个答案是错误的。配置“System.ServiceModel.MessageLogging”的源和监听器来记录消息对我来说效果很好。不需要消息检查器。 (7认同)
  • 错误的!正如@TomW 所说,您可以简单地配置一个源来接收消息。 (2认同)