跟踪设置

WCF 跟踪建立在 System.Diagnostics 之上。要使用跟踪,你应该在配置文件或代码中定义跟踪源。

默认情况下不启用跟踪。要激活跟踪,必须创建跟踪侦听器,并在配置中为所选跟踪源设置 Off 以外的跟踪级别; 否则,WCF 不会生成任何痕迹。

以下示例显示如何启用消息日志记录并指定其他选项:

<configuration>
 <system.diagnostics>
  <sources>
    <source name="System.ServiceModel"
            switchValue="All"
            propagateActivity="true" >
      <listeners>
        <add name="wcf_trace"/>
      </listeners>
    </source>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
        <add name="wcf_trace"/>
      </listeners>
    </source>
  </sources>
  <sharedListeners>
    <add name="wcf_trace"
         type="System.Diagnostics.XmlWriterTraceListener" 
         initializeData="c:\temp\wcf_trace\DistanceService.svclog" />
  </sharedListeners>
 </system.diagnostics>

 <system.serviceModel>
  <diagnostics wmiProviderEnabled="true">
      <messageLogging 
           logEntireMessage="true" 
           logMalformedMessages="true"
           logMessagesAtServiceLevel="true" 
           logMessagesAtTransportLevel="true"
           maxMessagesToLog="3000" />
  </diagnostics>
 </system.serviceModel>
</configuration>

initializeData 指定该侦听器的输出文件的名称。如果未指定文件名,则会根据使用的侦听器类型生成随机文件名。

记录级别和选项

  • 服务水平

在此层记录的消息即将进入(接收时)或离开(发送时)用户代码。如果已定义过滤器,则仅记录与过滤器匹配的消息。否则,将记录服务级别的所有消息。除可靠消息传递消息外,还会在此级别记录基础结构消息(事务,对等通道和安全性)。在流式消息上,仅记录标头。此外,安全消息在此级别被解密记录。

  • 运输水平

在该层上记录的消息可以在线路上传输时或之后进行编码或解码。如果已定义过滤器,则仅记录与过滤器匹配的消息。否则,将记录传输层上的所有消息。此层记录了所有基础结构消息,包括可靠的消息传递消息。在流式消息上,仅记录标头。此外,安全消息在此级别记录为加密,除非使用 HTTPS 等安全传输。

  • 畸形水平

格式错误的消息是在任何处理阶段被 WCF 堆栈拒绝的消息。格式错误的消息按原样记录:如果是,则使用非正确的 XML 加密,依此类推。maxSizeOfMessageToLog 定义要记录为 CDATA 的消息的大小。默认情况下,maxSizeOfMessageToLog 等于 256K。有关此属性的详细信息,请参阅其他选项部分。

如果要禁用跟踪源,则应使用 messageLogging 元素的 logMessagesAtServiceLevel,logMalformedMessages 和 logMessagesAtTransportLevel 属性。你应该将所有这些属性设置为 false。