此示例演示如何将您自己的跟踪事件添加到分析跟踪流中,Windows Communication Foundation (WCF) 将把该分析跟踪流写入 .NET Framework 版本 4 中的 ETW。跟踪分析是为了便于查看服务,而不会导致较高性能损失。此示例演示如何使用 System.Diagnostics.Eventing API 来写入与 WCF 服务集成的事件。
有关 System.Diagnostics.Eventing API 的更多信息,请参见 System.Diagnostics.Eventing。
若要了解有关 Windows 中事件跟踪的更多信息,请参见使用 ETW 改善调试和性能优化(可能为英文网页)。
![]() |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录。
<安装驱动器>:\WF_WCF_Samples\WCF\Basic\Management\AnalyticTraceExtensibility
|
释放 EventProvider
此示例使用 System.Diagnostics.Eventing.EventProvider 类,该类实现 System.IDisposable。在实现 WCF 服务的跟踪时,可以针对服务的生存期使用 EventProvider 的资源。因此,为了便于阅读,此示例永远不会释放已包装的 EventProvider。如果出于某种原因服务具有不同的跟踪要求,并且必须释放此资源,则应根据释放非托管资源的最佳做法来修改此示例。有关释放非托管资源的更多信息,请参见实现 Dispose 方法(可能为英文网页)。
自承载与 Web 承载
对于 Web 承载的服务,WCF 的分析跟踪提供了一个名为“HostReference”的字段,该字段用于标识发出这些跟踪的服务。可扩展的用户跟踪可以参与此模型,此示例演示执行该操作的最佳做法。当竖线字符“|”实际显示在生成的字符串中时,Web 宿主引用的格式可以是下面任何一种:
如果该应用程序不在根处。
<SiteName><ApplicationVirtualPath>|<ServiceVirtualPath>|<ServiceName>
如果该应用程序在根处。
<SiteName>|<ServiceVirtualPath>|<ServiceName>
对于自承载服务,WCF 的分析跟踪不会填充“HostReference”字段。此示例中的 WCFUserEventProvider
类在由自承载服务使用时,其行为是一致的。
自定义事件详细信息
WCF 的 ETW 事件提供程序清单定义了三个事件,这些事件设计为由 WCF 服务作者在服务代码内发出。下表显示了这三个事件的分类。
事件 | 说明 | 事件 ID |
---|---|---|
UserDefinedInformationEventOccurred |
服务中发生的说明内容不是一个问题时发出此事件。例如,可以在对数据库成功进行调用后发出一个事件。 |
301 |
UserDefinedWarningOccurred |
发生的问题可能导致将来出现错误时发出此事件。例如,如果调用数据库失败,但能够通过回退到冗余数据存储区进行恢复,则可以发出一个警告事件。 |
302 |
UserDefinedErrorOccurred |
服务的行为方式不符合预期时发出此事件。例如,如果调用数据库失败且无法从其他位置检索数据,则可能会发出一个事件。 |
303 |
使用此示例
使用 Visual Studio 2010 打开 WCFAnalyticTracingExtensibility.sln 解决方案文件。
若要生成解决方案,请按 F6。
若要运行解决方案,请按 Ctrl+F5。
在 Web 浏览器中,单击**“Calculator.svc”**。服务的 WSDL 文档的 URI 应出现在浏览器中。复制该 URI。
运行 WCF 测试客户端 (WcfTestClient.exe)。
WCF 测试客户端 (WcfTestClient.exe) 位于 <Visual Studio 2010 安装目录>\Common7\IDE\ WcfTestClient.exe 中(默认 Visual Studio 2010 安装目录为 C:\Program Files\Microsoft Visual Studio 10.0)。
在 WCF 测试客户端中,通过选择**“文件”、“添加服务”**来添加服务。
在输入框中添加终结点地址。
单击**“确定”**关闭对话框。
ICalculator 服务将添加到**“我的服务项目”**下的左窗格中。
打开事件查看器应用程序。
在调用服务之前,请启动事件查看器并确保事件日志正在侦听从 WCF 服务发出的跟踪事件。
在**“开始”菜单中,选择“管理工具”,然后选择“事件查看器”。启用“分析”和“调试”**日志。
在事件查看器的树视图中,导航到**“事件查看器”、“应用程序和服务日志”、“Microsoft”、“Windows”、“应用程序服务器”->“应用程序”。右击“应用程序服务器”->“应用程序”,选择“查看”,然后选择“显示分析和调试日志”**。
确保已选中**“显示分析和调试日志”选项。启用“分析”**日志。
在事件查看器的树视图中,导航到**“事件查看器”、“应用程序和服务日志”、“Microsoft”、“Windows”、“应用程序服务器”->“应用程序”、“分析”。右击“分析”,然后选择“启用日志”**。
使用 WCF 测试客户端来测试服务。
在 WCF 测试客户端中,双击 ICalculator 服务节点下的**“Add()”**。
**“Add()”**方法将显示在右窗格中(带有两个参数)。
为第一个参数键入 2,为第二个参数键入 3。
单击**“调用”**调用该方法。
转到已经打开的**“事件查看器”窗口。导航到“事件查看器”、“应用程序和服务日志”、“Microsoft”、“Windows”、“应用程序服务器”->“应用程序”**。
右击**“分析”节点并选择“刷新”**。
事件将显示在右窗格中。
使用 ID 303 来查找事件,然后双击该事件将其打开,并检查其内容。
此事件是由 ICalculator 服务的
Add()
方法发出的,并且具有一个负载等于“2+3=5”的负载。
清理(可选)
打开**“事件查看器”**。
导航到**“事件查看器”、“应用程序和服务日志”、“Microsoft”、“Windows”、“应用程序服务器”->“应用程序”。右击“分析”并选择“禁用日志”**。
导航到**“事件查看器”、“应用程序和服务日志”、“Microsoft”、“Windows”、“应用程序服务器”->“应用程序”、“分析”。右击“分析”并选择“清除日志”**。
单击**“清除”**清除这些事件。
已知问题
“事件查看器”中存在一个已知问题,可能无法解码 ETW 事件。您可能会看到一条错误消息:“无法找到源“Microsoft-Windows-应用程序服务器-应用程序”中事件 ID <id> 的说明。本地计算机上未安装引发此事件的组件,或安装已损坏。可以安装或修复本地计算机上的组件。”如果遇到此错误,请从“操作”菜单中选择“刷新”。然后,该事件应能正确解码。
![]() |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录。
<安装驱动器>:\WF_WCF_Samples\WCF\Basic\Management\ETWTrace
|