WCF中记录SOAP消息日志
Windows Communication Foundation (WCF) 默认启用消息日志,WCF使用了在System.Diagnostics名称空间中定义的跟踪机制。在这个跟踪机制中,通过在配置文件中配置跟踪源(Trace Sources)和跟踪侦听器(Trace Listenners来记录跟踪数据。
在WCF中,要启用消息日志,必须在配置文件中(服务端或客户端)添加一个侦听器来侦听源:System.ServiceModel.MessageLogging,并且还需要为 <messagelogging>元素配置好属性。
配置格式如下:
<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来实现,如下所示:
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格式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)