WCF中记录SOAP消息日志

Posted alex80

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WCF中记录SOAP消息日志相关的知识,希望对你有一定的参考价值。

Windows Communication Foundation (WCF) 默认启用消息日志,WCF使用了在System.Diagnostics名称空间中定义的跟踪机制。在这个跟踪机制中,通过在配置文件中配置跟踪源(Trace Sources)和跟踪侦听器(Trace Listenners来记录跟踪数据。

在WCF中,要启用消息日志,必须在配置文件中(服务端或客户端)添加一个侦听器来侦听源:System.ServiceModel.MessageLogging,并且还需要为 <messagelogging>元素配置好属性。

配置格式如下:

 

技术分享图片
<system.serviceModel>
      <diagnostics>
          <messageLogging
            logEntireMessage="true"
            logMalformedMessages="true"
            logMessagesAtServiceLevel="false"
            logMessagesAtTransportLevel="true"
            maxMessagesToLog="2147483647"
            maxSizeOfMessageToLog="2147483647"
        />
      </diagnostics>
</system.serviceModel>
<system.diagnostics>
        <trace autoflush="true" />
        <sources>
            <source name="System.ServiceModel.MessageLogging">
                <listeners>
                    <add name="ServiceModelMessageLoggingListener">
                        <filter type=""/>
                    </add>
                </listeners>
            </source>            
        </sources>
        <sharedListeners>
            <add initializeData="Messages.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
                <filter type=""/>
            </add>
        </sharedListeners>
    </system.diagnostics>
技术分享图片

配置说明:

messageLogging 

   前四个属性表示启用哪些类型的日志记录,后两个属性表示消息记录最大占用空间值,如果达到最大值,则所有的日志记录活动会中止。

 

跟踪源System.ServiceModel.MessageLogging

  可以为源添加不同名称和类型的侦听器(listenner),在这个案例中我们将侦听器命名为:ServiceModelMessageLoggingListener,它是一个共享的侦听器,类型为

System.Diagnostics.XmlWriterTraceListener,使用这种类型的侦听器,必须要指定输出文件的路径和名称,通过设置来属性initializeData 来指定。如果路径不是绝对路径,则文件位于当前程序目录下。文件后缀名为svclog,这样打开时显示效果会比较好。显示效果如下图所示:

技术分享图片

 

消息过滤

可以通过配置消息过滤只记录我们想要跟踪的消息,可以在messageLogging元素中增加子元素filters来实现,如下所示:

 

技术分享图片
<messageLogging logEntireMessage="true"
    logMalformedMessages="true" 
    logMessagesAtServiceLevel="true"
    logMessagesAtTransportLevel="true"
    maxMessagesToLog="420">
    <filters>
        <add nodeQuota="10" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
                 /soap:Envelope/soap:Header
        </add>
     </filters>
</messageLogging>
技术分享图片

其中要过滤的内容为我们想要跟踪的消息具有的特征,过滤内容只包含SOAP Header部分。过滤内容支持完整的XPath格式。







































以上是关于WCF中记录SOAP消息日志的主要内容,如果未能解决你的问题,请参考以下文章

WCF - 获取原始请求/回复和操作名称

WCF 最大消息大小配额

将 MSMQ 端到端跟踪与 WCF 跟踪和应用程序级日志记录相关联

WCF:如何手动记录原始 xml 消息内容?

WCF - Soap 标头在安全元素中引用命名空间两次

csharp SOAP日志记录(记录所有传入和传出的xml)