65.9K
CodeProject 正在变化。 阅读更多。
Home

WCF 跟踪 FAQ

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.47/5 (10投票s)

2009 年 4 月 30 日

CPOL

5分钟阅读

viewsIcon

96664

WCF 跟踪 FAQ

目录

引言和目标

在本文中,我们将探讨如何在 WCF 服务中跟踪和调试信息。WCF 提供了一些现成的跟踪监听器。这些现成的跟踪监听器的基础是 .NET 跟踪监听器。因此,我们将首先理解跟踪监听器的基本概念,然后介绍 WCF 提供的现成跟踪监听器。

如今,我正在分发我 400 个问答电子书,其中涵盖了主要的 .NET 相关主题,如 WCF、WPF、WWF、Ajax、Core .NET、SQL Server、架构等等。我相信您会喜欢 这本电子书

WCF 基本问答

如果您是 WCF 新手,我建议您在阅读本文之前先阅读我的 WCF 常见问题解答。它将帮助您理解 WCF 的基础知识,以便您能更好地理解本文。

能否解释一下 Trace Listener 的概念?

Tracelisteners 是从 trace 类获取跟踪信息的对象,并将数据输出到某个媒介。例如,从图 TraceListener 中可以看到它是如何监听 trace 对象并将相同的数据输出到 UI、文件或 Windows 事件日志的。有三种不同的 tracelistener 类型:第一种是 defaulttracelistener(它将数据输出到 UI),第二种是 textwritertracelistener(它将数据输出到文件),最后一种是 'Eventlogtracelistener',它将相同的数据输出到 Windows 事件日志。

图:TraceListener

下面是 textwritertracelistenereventlogtracelistener 的代码片段。使用 textwritertracelistener,我们将跟踪转发到了 ErrorLog.txt 文件,在第二个代码片段中,我们使用了 Eventlogtracelistener 将跟踪转发到了 Windows 事件日志。

图:Tracelistener 运行中

现成的跟踪事件有哪些?它们适用于哪些 WCF 对象?

您始终可以使用 .NET 提供的核心 Tracelistener 事件,但 WCF 为核心 WCF 对象提供了现成的跟踪监听器。

程序集名称 描述
System.ServiceModel 记录以下内容:
  • 消息处理
  • 配置信息读取
  • 传输级别操作
  • 安全请求
System.ServiceModel.MessageLogging 为系统中流过的每条消息生成跟踪信息。
System.ServiceModel.IdentityModel 为身份验证和授权生成跟踪数据。
System.ServiceModel.Activation 发出有关服务激活的信息。
System.Runtime.Serialization 对象序列化或反序列化时发出信息。WCF 在请求过程中始终进行序列化和反序列化,因此这是一个查看请求内容的好事件。
System.IO.Log 发出与通用日志文件系统 (CLFS) 相关的消息。
CardSpace 发出与 WCF 上下文中发生的任何 CardSpace 身份处理相关的跟踪消息。

如何为现成的 WCF 对象启用跟踪?

我们将为 System.ServiceModel 跟踪对象启用跟踪。要启用跟踪,我们需要在 WCF 服务的 web.config 文件中启用 system.diagnostics XML 节点。我们还需要为 System.ServiceModel 监听器对象定义监听器的类型。因此,我们添加 listeners 标记,类型为 System.Diagnostics.XmlWriterTraceListener。我们还需要定义创建文件的文件和路径。对于当前场景,我们已将文件定义为 Traces.svclog,并将文件夹定义为 c:\ 驱动器。

<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing">
<listeners>
<add name="log"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>

现在,如果您运行 WCF 服务,您可以看到一个 XML 文件创建,如下所示

#<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>0</EventID>
<Type>3</Type>
<SubType Name="Transfer">0</SubType>
<Level>255</Level>
<TimeCreated SystemTime="2009-04-30T03:21:09.5625000Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" 
	RelatedActivityID="{d11829b7-d2db-46d5-a4ac-49a37a56376e}" />
<Execution ProcessName="WebDev.WebServer" ProcessID="2660" ThreadID="8" />
<Channel/>
<Computer>COMPAQ-JZP37MD0</Computer>
</System>
<ApplicationData></ApplicationData>
</E2ETraceEvent>

Trace Listeners 中的 tracelevel 是什么概念?

在上一个问题中,我们已将 switch 值指定为 information。此值指示您要记录什么类型和级别的跟踪信息。以下是该列表。

跟踪级别 描述
关闭 忽略所有跟踪消息
关键 记录意外处理事件或未处理的异常。应用程序将立即或 shortly 终止。
Error(错误) 发生了意外的处理事件或异常。应用程序仍能够继续处理。
警告 表示可能存在问题,但应用程序将继续运行。
信息 应用程序运行顺利,只记录了信息性消息。在这种情况下,消息只是里程碑。
Verbose(详细) 与信息非常相似,但提供更多细节。
ActivityTracing 在这种情况下,消息与组件之间的通信以及活动相关。
全部 在这种情况下,所有消息都被捕获。

跟踪级别值在 switch 值中的 source 标记中指定。例如,下面的 web.config 代码片段将跟踪类型指示为 Information

<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing">
............
............
............
............

什么是服务级消息和传输级消息?

您可以记录 WCF 消息的两个级别:一个是服务级别,另一个是传输级别。服务级别:在此级别,消息在进入用户代码或离开用户代码时进行记录。
传输级别:在此级别,消息在准备编码/解码时进行记录。所有传输级别、基础设施消息以及可靠性消息都将被记录。您可以在 diagnostics 节点中指定消息级别,如下面的代码片段所示。

<system.serviceModel> 
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="true"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="10000"/>
</diagnostics>
</system.serviceModel>

Messagelogging 还有其他属性。以下是关于它们的简要描述。

Attribute 描述
logEntireMessage 是否应记录整个消息,还是只记录报头。
logMalformedMessages 是否应记录格式错误的邮件。
logMessagesAtServiceLevel 是否应记录服务级别的消息。
logMessagesAtTransportLevel 是否应记录传输级别的消息。
maxMessageToLog 表示应记录多少条消息的数字。
maxSizeOfMessageToLog 默认值为 256Kb。消息日志的最大大小。

历史

  • 2009 年 4 月 30 日:初始发布
© . All rights reserved.