扩展跟踪
ExtendingTracing 示例演示如何通过在客户端和服务代码中编写用户定义的活动跟踪来扩展 Windows Communication Foundation (WCF) 跟踪功能。 通过编写用户定义的活动跟踪,用户可以创建跟踪活动,并将跟踪分组为逻辑工作单元。 还可以通过传输(在同一个终结点内)和传播(在终结点之间)来关联活动。 在此示例中,同时为客户端和服务启用了跟踪。 有关如何在客户端和服务配置文件中启用跟踪的详细信息,请参阅跟踪和消息日志记录。
此示例基于入门指南。
注意
本主题的最后介绍了此示例的设置过程和生成说明。
跟踪和活动传播
用户定义的活动跟踪允许用户创建自己的跟踪活动,以便将跟踪分组为逻辑工作单元,通过传输和传播关联活动,并降低 WCF 跟踪的性能成本(例如,日志文件的磁盘空间成本)。
添加自定义源
用户定义的跟踪既可以添加到客户端代码中,又可以添加到服务代码中。 在客户端或服务配置文件中添加跟踪源使得可以在服务跟踪查看器工具 (SvcTraceViewer.exe) 中记录和显示这些自定义跟踪。 下面的代码演示如何在配置文件中添加一个名为 ServerCalculatorTraceSource
的用户定义的跟踪源。
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
<source name="ServerCalculatorTraceSource" switchValue="Information,ActivityTracing">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="xml">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\logs\ServerTraces.svclog" type="System.Diagnostics.XmlWriterTraceListener"
name="xml" traceOutputOptions="Callstack">
<filter type="" />
</add>
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
....
关联活动
若要跨终结点直接关联活动,必须将 propagateActivity
跟踪源中的 true
属性设置为 System.ServiceModel
。 而且,若要不通过 WCF 活动而传播跟踪,必须关闭 ServiceModel 活动跟踪。 这可以在以下代码示例中看到。
备注
关闭 ServiceModel 活动跟踪与将 switchValue
属性表示的跟踪级别设置为 off 并不一样。
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
...
</source>
</sources>
</system.diagnostics>
降低性能成本
将 ActivityTracing
跟踪源中的 System.ServiceModel
设置为 off 将生成一个只包含用户定义的活动跟踪的跟踪文件,而不包含任何 ServiceModel 活动跟踪。 排除 ServiceModel 活动跟踪会使日志文件小得多。 但会丢失关联 WCF 处理跟踪的机会。
设置、生成和运行示例
若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照 Building the Windows Communication Foundation Samples中的说明进行操作。
要使用单机配置或跨计算机配置运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。