博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

WF4:ETW跟踪参与者

Posted on 2011-01-23 14:27  生鱼片  阅读(3196)  评论(5编辑  收藏  举报

WF4中的跟踪服务是通过跟踪参与者直接监听运行时放出的跟踪记录,并以根据选择的方式来处理它们。我们可以将日志记录到不同的媒介中,本文我们看看WF4中支持的ETW跟踪参与者。

Windows® 事件跟踪 (ETW) 是操作系统提供的一个高速通用的跟踪工具。ETW 使用内核中实现的缓冲和日志记录机制,提供对用户模式应用程序和内核模式设备驱动程序引发的事件的跟踪机制。此外,ETW 使您能够动态地启用和禁用日志记录,轻松地在实际生产环境下进行详细跟踪,而无需重新启动系统或重新启动应用程序。日志记录机制使用每处理器的缓冲区,由异步写线程将这些缓冲区写入磁盘。这样,大型服务器应用程序在写入事件时所受的干扰能够降至最小。

我们新建一个工作流项目,工作流的设计中我们随便加上几个Activity即可,如下:

clip_image002

下面我们来看看如何配置ETW跟踪,代码如下:

//ETW tracking setup

TrackingProfile trackingProfile = new TrackingProfile();

trackingProfile.Queries.Add(new WorkflowInstanceQuery

{

States = { "*"}

});

trackingProfile.Queries.Add(new ActivityStateQuery

{

States = { "*" }

});

trackingProfile.Queries.Add(new CustomTrackingQuery

{

ActivityName="*",

Name="*"

});

EtwTrackingParticipant etwTrackingParticipant = new EtwTrackingParticipant();

etwTrackingParticipant.TrackingProfile = trackingProfile;

在上面代码中我们可以选择记录那些跟踪信息,这个信息是通过跟踪配置文件来完成的,可以根据你的需求来定制,完成之后我们需要将etwTrackingParticipant以扩展点的方式添加到工作流中,代码如下:

AutoResetEvent autoResetEvent=new AutoResetEvent(false);

WorkflowApplication workflowApplication = new WorkflowApplication(new Workflow1());

workflowApplication.Completed = (arg) => { autoResetEvent.Set(); };

workflowApplication.Extensions.Add(etwTrackingParticipant);

workflowApplication.Run();

autoResetEvent.WaitOne();

之后我们运行工作流,结果很简单:

clip_image004

我们打开windows的事件查看器,切换到下图位置可以到有相关的信息记录在上面,这就是工作流运行后的信息:

clip_image006

我们可以看到工作流运行的详细信息如下:

clip_image008