wf框架编程-监控部分:监控2009-10-14 cnblogs lodestar1 结构分析参考:MSDN http://msdn2.microsoft.com/zh-cn/magazine/cc163466.aspxWF的监控参考下图:WF容许有多个跟踪服务(即可以在WrokflowRuntime中Add多个TrckingService的子类),允许将多个跟踪服务添加到运行库中以支持不同的业务要求,各跟踪服务负责特定的实现,但是只有一个跟踪侦听器:跟踪侦听器接收所有事件的通知,多数情况下,只有这些事件中的一个子集是有用的,如果要使用多个跟踪服务,各任务有可能将只关注于唯一一个信息子集,跟踪侦听器将查询各配置的跟踪服务以跟踪各类工作流的配置文件

图片来源:MSDN配置文件其实就是TrackingProfile,实质上是一组跟踪点,关于何时提取数据以及提取哪些数据的信息。我们可以图形化配置TrackingProfile,可以加快开发和部署跟踪配置文件的速度如果有图形化配置修改Trackingprofile的需求:可以参考http://netfx3.com/content/WFHome.aspx 里面的TrackingProfileDesigner这个例子。2 设计思路分析2.1 静态结构在工作流引擎中每个工作流实例都是做为一个线程运行的,出于线程安全性考虑工作流引擎只和TrackingService存在依赖关系,TrackingService的职责是获得TrackingProfile和TrackingChannel,TrackingPfofile定义什么状态将会被监控,默认的Tacking Pofile对 [实例的各类状态]、[Activity的各类状态]、[用户跟踪行为]的所有状态进行记录。而TrackingChannel定义如何将捕获的信息保存。这里要注意的是:TrackingProfile不是抽象类,它只是做为容器,没有方法。2.2 TrackingProfile结构分析:上面提到默认的Tacking Pofile对 [实例的各类状态]、[Activity的各类状态]、[用户跟踪行为]的所有状态进行记录。默认的Tacking Pofile对所有没有自定义Tacking Pofile的工作流有效。如果工作流只需要监控某些特定的状态变化,可用自定义Tacking Pofile进行筛选,我们可以直接修改默认的Tacking Pofile 。参考下面的类图:TrackingProfile由TrackingPointCollection构成,TrackingPoint中的MatchingLocations 和 ExcludedLocations 集合使您能够密切控制数据收集的时间,MatchingLocations 集合以指明您要跟踪这些事件,或者将此信息添加到 ExcludedLocations 集合以指明该数据不应被收集。

如何加入UserData?要实现图形化跟踪只跟踪状态变化是不够的,对于实际运用,跟踪时候往往要跟踪一些其他信息,比如:任务是谁(角色)发起,指派给谁(角色),具体由谁处理,处理时间等等。所以要加入自定义的UserData才行。如果要加入用户自定义的数据可以在自定义Acitivity中调用TrackData方法实现,请参考Activity定义,也可以调用ActivityExecutionContext的方法实现。protected void TrackData(object userData);protected void TrackData(string userDataKey, object userData);调用TrackData会触发自定义跟踪事件2.3 默认情况下Tracking的使用流程默认使用方式(sqlserver存储Tracking信息)条件:SqlTrackingService加入运行时

workflowRuntime.AddService(new SqlTrackingService(connectionString));1.SqlTrackingQuery.TryGetWorkflow得到SqlTrackingWorkflowInstance2.得到三种TrackingRecord的集合IList<WorkflowTrackingRecord> = SqlTrackingWorkflowInstance.WorkflowEventsIList<ActivityTrackingRecord> = SqlTrackingWorkflowInstance.ActivityEventsIList<UserTrackingRecord> = SqlTrackingWorkflowInstance.UserEvents