回顾一下,前面我们主要研究了workflow的一些基本对象。
我们通过活动创建workflow任务,它们在执行时由WorkflowInstance对象管理,workflow实例由WorkflowRuntime编入队列并进行控制。
本节插播一个内容。可以放在后面,提前来说说,WF的跟踪服务。WF为我们提供了一些服务来和这些对象协同工作。
一、 服务
服务是一种附加的软件库,工作流可使用它完成任务。本文的跟踪服务是可选的,有些服务则是工作流必须要执行的。
管理线程的服务、跟踪服务、事务服务等都是可选的,你也可以自已创建服务。
下表列出了基本服务,一般我们使用从这些服务中派生出的服务。
服务 | 功能 |
WorkflowPersistenceService | 抽象基类,派生出所有持久化的服务。 |
WorkflowQueuingService | 该基类为你提供了一些方法,使你能用来管理和一个工作流实例相关的工作流队列。 |
WorkflowRuntimeService | 抽象基类,派生出工作流运行时的内核服务。 |
WorkflowScheddulerService | 所有在工作流运行时宿主上创建线程以运行工作流实例的类的基类。 |
WorkflowSubscriptionService | 那些管理订阅 (Subscriptions)工作流运行时类的基类。 |
WorkflowTransactionService | 所有事务服务的基类。 |
TrackingService | 一个抽象基类,在跟踪服务和运行时跟踪基础结构(infrastructure)间提供了基本的接口。 |
我们使用的服务从上述服务派生。例如,为实例创建线程的DefaultWorkflowSchedulerService使用WorkflowScheddulerService作为它的基类。
二、 跟踪服务
WF由一个主要的跟踪服务 – SqlTrackingService承载,它继承自上表的TrackingService。另外还有ConsoleTrackingService和SimpleFileTracingService,它们分别允许你把跟踪信息写到控制台窗口和文件,而不是Sql Server数据库。
使用SqlTrackingService进行工作流事件跟踪
通过添加一个跟踪服务到工作流运行时中,你可以跟踪工作流的处理过程。可以创建自定义的跟踪事件,也可以创建配置文件来过滤跟踪数据。
跟踪事件激发时,WF创建并管理跟踪记录。可以从WF中直接访问这些跟踪记录。这些信息也被记录到数据库中,因此可以直接从数据库中检索这些信息。通常使用WorkflowMonitor或其他外部跟踪监控工具来查询这些跟踪信息。
下表列出了WF事件跟踪中经常使用的对象。
对象 | 功能 |
ActivityTrackingCondition | 表示一个条件,该条件通过使用指定的比较运算符将活动成员的值与指定值进行比较。 |
ActivityTrackingLocation | 定义与根工作流实例的可能执行路径中的某个活动状态事件相对应的活动限定位置。 |
ActivityTrackingRecord | 包含运行库跟踪基础结构在ActivityTrackPoint 匹配时发送到跟踪服务的数据。它还用在ActivityEvents 属性的返回列表中。 |
ActivityTrackPoint | 定义工作流实例的可能执行路径中要跟踪的点,该点与活动执行状态更改关联。 |
SqlTrackingQuery | 包含用于管理跟踪数据查询的方法和属性,跟踪数据包含在SqlTrackingService 使用的SQL 数据库中。 |
SqlTrackingQueryOptions | 包含一些属性,这些属性用于约束SqlTrackingQuery.GetWorkflows 调用所返回SqlTrackingWorkflowInstance 对象的集合。 |
SqlTrackingWorkflowInstance | 通过工作流实例的SqlTrackingService 提供对 SQL 数据库中保留的跟踪数据的访问 |
TrackingProfile | 定义根工作流实例的可能执行路径中的关注点,应将有关该关注点的信息通知跟踪服务。它过滤跟踪事件,并把过滤后的跟踪记录返回给某个跟踪服务。这里有三种类型的跟踪事件能被过滤:活动状态事件、工作流状态事件和用户事件。 |
UserTrackingLocation | 定义与根工作流实例的可能执行路径中的某个用户事件相对应的活动限定位置。 |
UserTrackingRecord | 包含运行库跟踪基础结构在UserTrackPoint 匹配时发送到跟踪服务的数据。 |
UserTrackPoint | 定义一个要跟踪的点(与用户事件关联),该点位于根工作流实例的可能执行路径中。 |
WorkflowDataTrackingExtract | 指定要从工作流的根活动中提取,并在跟踪点匹配时随关联的批注集合一起发送到跟踪服务的属性或字段。 |
WorkflowTrackingLocation | 定义对发生在根工作流实例中的特定工作流事件的关注;用于按跟踪配置文件中的WorkflowTrackPoint 进行匹配。 |
WorkflowTrackingRecord | 包含运行时跟踪基础结构在匹配了WorkflowTrackPoint 时发送到跟踪服务的数据。它还用在WorkflowEvents属性的返回列表中。 |
WorkflowTrackPoint | 定义一个与一组工作流状态事件关联的点,这些事件在根工作流实例的可能执行路径中进行跟踪。 |
这些对象可考虑归为两大类:跟踪数据检索和跟踪详细说明。跟踪检索对象,如SqlTrackingQuery,一旦跟踪数据被存储到数据库中,可用来采集跟踪数据。跟踪详细说明对象,如跟踪点和位置对象,允许你能在工作流代码中控制应该跟踪什么。
跟踪详细说明对象可归为三大组:活动事件、工作流事件和用户事件。
和活动相关的跟踪对象,如ActivityTrackingPoint或ActivityTrackingLocation,用来记录相关联的活动的事件信息并保存到跟踪数据库中。这些事件包含如下活动:活动取消、未处理的异常和执行的事件。
工作流事件跟踪对象和工作流相关的事件的工作方式很像。
跟踪记录可添加批注。批注是保存跟踪记录并被记录进跟踪数据库的字符串。
为过滤掉不想跟踪的事件,可以创建一个跟踪配置文件,它是一个XML文档,指明跟踪的对象和排除跟踪的对象。它被记录进数据库,当执行工作流时被恢复。
以上都是一些枯燥的概念,下节将通过一个例子说明。