对于WCF的消息跟踪主要有Microsoft Service Trace Viewer(服务跟踪查看器)和tcpTrace这两个。服务跟踪查看器工具功能比较强大可以了解 WCF 侦听器生成的诊断跟踪信息,从而找到错误的根本原因。该工具提供了一种轻松查看、分组和筛选跟踪的方法,以便可以诊断、修复和验证 WCF 服务的问题。但是使用之前需要在服务端作相应的配置。tcpTrace其实就是一个通过端口映射来捕获Tcp包的工具使用起来非常简单,由于WCF的很多绑定都会走tcp协议因此使用该工具来捕获数据包会非常方便。下面就简要的介绍一下这两个工具的使用。
Microsoft Service Trace Viewer
Service Trace Viewer是.Net Framework自还的工具一般在C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin路径下可以找到。以《》中的源码为例,我们在使用之前需要对服务端的App.Config配置文件作相应的更改:
Diagnostics Configure <?xml version="1.0" encoding="utf-8" ?><configuration> <!-- WCF 配置声明--> <system.serviceModel> <!--添加跟踪节点--> <diagnostics performanceCounters="All" wmiProviderEnabled="true"> <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="100000"/> </diagnostics> <services> <endpoint address="" binding="basicHttpBinding" contract="Cbcye.Contract.IHelloWorld" name=""></endpoint> <host> <baseAddresses> <add baseAddress="http://localhost:7788/cbcye/helloworld%22/> </baseAddresses> </host> </service> </services> <!--跟踪节点配置--> <system.diagnostics > <sharedListeners> <add name="sharedListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\temp\trace.svclog" /> </sharedListeners> <sources> <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing" > <listeners> <add name="sharedListener" /> </listeners> </source> <source name="System.ServiceModel.MessageLogging" switchValue="Verbose"> <listeners> <add name="sharedListener" /> </listeners> </source> </sources> </system.diagnostics> </configuration> 运行WCF服务端与客户端,让WCF服务端与客户端产生通讯数据。
打开服务跟踪查看器打开配置文件中initializeData属性的路径相对应的文件,我们就可以在查看器中查看到相应的数据。
tcpTrace
tcpTrace的使用比较简单在启动tcpTrace时会输入要映射的端口即可。如《》中的示例,在使用之前我们需要先改变客户端请求的地址的端口从7788改为8080,这样客户端在请求服务时会把数据发到监听8080端口的tcpTrace,tcpTrace之后会将数据转发给7788端口的服务。
tcpTrace监听到的WCF数据(注意:tcpTrace仅支持通过tcp传输的消息)