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消息日志的更多相关文章

  1. WCF学习之旅—WCF中传统的异常处理(十六)

    WCF中的异常处理 在软件开发过程中,不可能没有异常的出现,所以在开发过程中,对不可预知的异常进行解决时,异常处理显得尤为重要.对于一般的.NET系统来说,我们简单地借助try/catch可以很容易地 ...

  2. ajax调用本地wcf中的post和get

    我们可以通过jQuery调用本地或者远程的wcf服务,本文讲解的是对本地wcf服务的post和get调用方式. post和get到底有什么区别呢?此处不作详述. 但是,post对请求的数据格式更为严格 ...

  3. WCF初探-27:WCF中的实例化

    理解WCF中的实例化机制 “实例化”是指对用户定义的服务对象以及与其相关的 InstanceContext 对象的生存期的控制.也就是说我们的客户端程序在调用服务端方法时,需要实例化一个服务端代理类对 ...

  4. WCF中常用的binding方式

    WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务.WSHttpBinding: 比 Basi ...

  5. WCF初探-22:WCF中使用Message类(上)

    前言 从我们学习WCF以来,就一直强调WCF是基于消息的通信机制.但是由于WCF给我们做了高级封装,以至于我们在使用WCF的时候很少了解到消息的内部机制.由于WCF的架构的可扩展性,针对一些特殊情况, ...

  6. WCF初探-23:WCF中使用Message类(下)

    前言 在上一篇WCF中使用Message类(上)中,文章介绍了WCF中使用Message类的基本知识和怎样创建消息,本文是承接上一篇文章,如果想要更好的阅读本文,请先阅读上一篇文章.在这篇文章中,我将 ...

  7. 跟我一起学WCF(12)——WCF中Rest服务入门

    一.引言 要将Rest与.NET Framework 3.0配合使用,还需要构建基础架构的一些部件.在.NET Framework 3.5中,WCF在System.ServiceModel.Web组件 ...

  8. 跟我一起学WCF(10)——WCF中事务处理

    一.引言 好久没更新,总感觉自己欠了什么一样的,所以今天迫不及待地来更新了,因为后面还有好几个系列准备些,还有很多东西需要学习总结的.今天就来介绍下WCF对事务的支持. 二.WCF事务详解 2.1 事 ...

  9. 真实世界:使用WCF扩展记录服务调用时间

    WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Layer 之上还提供了一个高级运行时,主要是针对应用程序开发人员.在 WCF 文档中,它常被称为服 ...

随机推荐

  1. Python 缓冲区

    转自:https://blog.csdn.net/pro_leo/article/details/41786397(有修订) 1.Python缓存作用: a.提高执行效率. b.减少内存负担. 2.首 ...

  2. Spring框架中的Quartz定时任务使用笔记(通过@Scheduled注解的方式实现)

    1.修改spring的xml配置信息 applicationContext.xml 三个部分内容 1.xmlns添加:xmlns:task="http://www.springframewo ...

  3. windows下端口映射(端口转发)

    windows下端口映射(端口转发) 转载: https://blog.csdn.net/i1j2k3/article/details/70228043 本文是对网文的归纳整理,算不上原创,摸索过程亲 ...

  4. Linux学习之文件属性chattr权限与sudo权限(十二)

    Linux学习之文件属性chattr权限与sudo权限 文件属性chattr Linux文件的隐藏属性在保护系统文件的安全性上非常重要,是防止误操作的,对root用户也同样有效.chattr命令只能在 ...

  5. Object类浅析

    Object类的方法有: hashCode(): 返回该对象的哈希码值 hashCode 的常规协定是: 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回 ...

  6. 把玩Javascript中的bind

    前言 今天闲着无聊随便逛了逛MDN,忽而看到一个方法Function.prototype.bind(),突然发现除了使用这个方法之外都没有仔细琢磨过这个方法.于是乎,找到了kill time的事情-写 ...

  7. C# 基于 adb 控制安卓

    我司呢,有深信服网关. 我们做项目,日常是比较“清闲”的,所以呢,深信服让你没有办法愉快的使用电脑, 但是手机是可以连外网和外面的 wifi 的,所以我们就玩手机,但是玩手机这么明显会被 Leader ...

  8. COGS.1272.[AHOI2009]行星序列(线段树 区间加、乘、求和)

    题目链接 //注意取模! #include<cstdio> #include<cctype> using namespace std; const int N=1e5+5; i ...

  9. COGS.1317.数列操作c(分块 区间加 区间求和)

    题目链接 #include<cmath> #include<cstdio> #include<cctype> #include<algorithm> u ...

  10. python图片和分形树

    链接: 这10个Python项目很有趣! Python 绘制分形图(曼德勃罗集.分形树叶.科赫曲线.分形龙.谢尔宾斯基三角等)附代码 使用Python生成树形图案 神奇的代码:用 Python 生成分 ...