理解WF的跟踪服务
一. WF提供了TrackingService抽象基类,用于为WF应用程序提供跟踪服务。跟踪服务可用一致、可靠而灵活的方式跟踪工作流相关的信息。跟踪框架的宗旨使宿主通过工作流执行期间引发的事件,而在执行期间可用观测到工作流实例。
工作流服务可用引发以下事件:
|
实例的各类状态 |
Aborted、 Changed、 Completed、 Created、 Exception、 Idle、 Loaded、 Persisted、 Resumed、 Started、 Suspended、 Terminated、 Unloaded |
|
Activity的各类状态 |
一个工作流是由多个Activity组成的,每一个Activity都会有一个生命周期,在此期间,Activity会经历多种状态: Canceling、 Closed、 Compensating、 Executing、 Faulting、 Initialized |
|
用户跟踪行为 |
可以在Activity代码中用TrackData方法向Tacking服务提交自定义状态点 |
代码实例:
二、表结构

WorkflowInstance 工作流实例
|
WorkflowInstanceInternalId |
工作流实例数据库内部号 ,数据库流水号 |
|
WorkflowInstanceId |
工作流实例GUID号 |
|
ContextGuid |
上下文GUID号 |
|
CallerInstanceId |
|
|
CallPath |
|
|
CallerContextGuid |
|
|
CallerParentContextGuid |
|
|
WorkflowTypeId |
工作流类型数据库内部号, Workflow.WorkflowTypeId |
|
InitializedDateTime |
初始化时间 |
|
DbInitializedDateTime |
|
|
EndDateTime |
结束时间 |
|
DbEndDateTime |
|
WorkflowInstanceEvent 工作流实例结果
|
WorkflowInstanceEventId |
数据库流水号 |
|
WorkflowInstanceInternalId |
工作流实例数据库内部号:WorkflowInstance.WorkflowInstanceInternalId |
|
TrackingWorkflowEventId |
|
|
EventDateTime |
结果时间 |
|
EventOrder |
|
|
EventArgTypeId |
|
|
EventArg |
|
|
DbEventDateTime |
|
Workflow 工作流模板的类型编号与描绘
|
WorkflowTypeId |
工作流类型数据库内部号,数据库流水号 |
|
WorkflowDefinition |
XML字串,类型结构的描述 |
UserEvent 用户跟踪信息
在Activity里使用this.TrackData方法添加用户跟踪结果时,数据存储在该表
|
UserEventId |
用户跟踪结果ID,数据库流水号 |
|
WorkflowInstanceInternalId |
该结果所属的工作流实例的数据ID, WorkflowInstance.WorkflowInstanceInternalId |
|
EventOrder |
|
|
ActivityInstanceId |
该用户跟踪所属的Activity实例ID ActivityInstance.ActivityInstanceId |
|
EventDateTime |
|
|
UserDataKey |
用户跟踪结果键,用this.TrackData(KEY,DATA)的KEY值 |
|
UserDataTypeId |
|
|
UserData_Str |
用户跟踪结果值, 用this.TrackData(KEY,DATA)或this.TrackData(DATA)的DATA值 |
|
UserData_Blob |
|
|
UserDataNonSerializable |
|
|
DbEventDateTime |
|
Type
所有在工作流中引用的Activity的信息,包括系统自带的与用户自定义的
|
TypeId |
Activity类型数据库内部号,数据库流水号 |
|
TypeFullName |
Activity名,格式是命名空间,如System.Workflow.Activities.CodeActivity 或wxd.lzmActivity |
|
AssemblyFullName |
格式为版本号,公钥 |
|
IsInstanceType |
|
TrackingWorkflowEvent 可跟踪的结果类型码表
|
TrackingWorkflowEventId |
结果编号数据库内部号 |
|
Description |
描述文字,Created,Completed,Idle,Suspended,Resumed,Persisted,Unloaded, Loaded,Exception,Terminated,Aborted,Changed,Started |
TrackingProfileInstance
|
InstanceId |
|
|
TrackingProfileXml |
|
|
UpdatedDateTime |
|
TrackingProfile
自定义TrackingProfile的数据,自定义跟踪筛选器
|
TrackingProfileId |
TrackingProfile的编号,数据库流水号 |
|
Version |
版本, |
|
WorkflowTypeId |
该筛选器所属的工作流的模板 |
|
TrackingProfileXml |
筛选器的XML结构 |
|
InsertDateTime |
插入时间 |
TrackingPartitionSetName
|
PartitionId |
|
|
Name |
|
|
CreatedDateTime |
|
|
EndDateTime |
|
|
PartitionInterval |
|
TrackingPartitionInterval
|
Interval |
|
TrackingDataItemAnnotation
|
TrackingDataItemId |
|
|
WorkflowInstanceInternalId |
|
|
Annotation |
|
TrackingDataItem
|
TrackingDataItemId |
|
|
WorkflowInstanceInternalId |
|
|
EventId |
|
|
EventTypeId |
|
|
FieldName |
|
|
FieldTypeId |
|
|
Data_Str |
|
|
Data_Blob |
|
|
DataNonSerializable |
|
RemovedActivity
|
WorkflowInstanceInternalId |
|
|
WorkflowInstanceEventId |
|
|
QualifiedName |
|
|
ParentQualifiedName |
|
|
RemovedActivityAction |
|
|
Order |
|
EventAnnotation
|
WorkflowInstanceInternalId |
|
|
EventId |
|
|
EventTypeId |
|
|
Annotation |
|
DefaultTrackingProfile
默认的TrackPoints的XML字串配置文件
|
Version |
版本号 |
|
TrackingProfileXml |
XML字串的TrackPoints配置文件 |
|
InsertDateTime |
|
AddedActivity
|
WorkflowInstanceInternalId |
|
|
WorkflowInstanceEventId |
|
|
QualifiedName |
|
|
ActivityTypeId |
|
|
ParentQualifiedName |
|
|
AddedActivityAction |
|
|
Order |
|
ActivityInstance
每个实例的每个Activity的信息
|
WorkflowInstanceInternalId |
所属的工作流实例:WorkflowInstance.WorkflowInstanceInternalId |
|
ActivityInstanceId |
Activity状态流水号,数据库内部号 |
|
QualifiedName |
Activity,调计时Activity的名子 |
|
ContextGuid |
GUID |
|
ParentContextGuid |
GUID |
|
WorkflowInstanceEventId |
|
ActivityExecutionStatusEvent
每个实例的每个Activity的执行状态结果
|
ActivityExecutionStatusEventId |
Activity实例流水号,数据库内部号 |
|
WorkflowInstanceInternalId |
所属的工作流实例: WorkflowInstance.WorkflowInstanceInternalId |
|
EventOrder |
|
|
ActivityInstanceId |
执行状态,ActivityExecutionStatus.ExecutionStatusId |
|
ExecutionStatusId |
|
|
EventDateTime |
|
|
DbEventDateTime |
|
ActivityExecutionStatus
Activity执行状态码表
|
ExecutionStatusId |
状态流水号,数据库内部号 |
|
Description |
描述文字,Initialized,Executing,Canceling,Closed,Compensating,Faulting |
Activity
每个工作流模板中的Activity与工作流模板,及Activity类型的关系
|
WorkflowTypeId |
所属工作流模板,Workflow.WorkflowTypeId |
|
QualifiedName |
Activity的代码名 |
|
ActivityTypeId |
该Activity的类型, Type.TypeId |
|
ParentQualifiedName |
该Activity的父容器名,为空表示为工作流主容器 |
存储过程
GetTrackingProfile 得到自定义筛选器的版本
得到Profile版本,(得到自定义筛选器的版本)
|
@TypeFullName |
值为要查询的工作流类的类名: typeof(wxdlzm1).ToString() 或typeof(wxdlzm1).FullName |
|
@AssemblyFullName |
值为要查询工作流类的全称名: typeof(wxdlzm1).Assembly.FullName |
|
@Version |
|
|
@CreateDefault |
|
UpdateTrackingProfile 插入自定义筛选器到TrackingProfile表
插入Profile到TrackingProfile表,(插入自定义筛选器到TrackingProfile表)
|
@TypeFullName |
值为要设置工作流类的类名: typeof(wxdlzm1).ToString() |
|
@AssemblyFullName |
值为要设置工作流类的全称名: typeof(wxdlzm1).Assembly.FullName |
|
@Version |
值为要指定的片本号的字串:格式"3.0.0.7" |
|
@TrackingProfileXml |
值为TrackingProfile格式的XML字串 |
三. TrackingProfile跟踪服务筛选器
1.Tacking服务所要记录的状态是可以通过自定义Tacking Pofile进行筛选的.
2.默认Tacking服务对 [实例的各类状态]、[Activity的各类状态]、[用户跟踪行为]的所有状态进行记录,
3.可以自定义自定义Tacking Pofile让Tacking服务只记录实际需要的状态.
4.以下各类状态变化可被Tacking服务记录,也可用Tacking Pofile进行筛选:
|
实例的各类状态 |
Aborted、 Changed、 Completed、 Created、 Exception、 Idle、 Loaded、 Persisted、 Resumed、 Started、 Suspended、 Terminated、 Unloaded |
|
Activity的各类状态 |
一个工作流是由多个Activity组成的, 每一个Activity都会有一个生命周期,在此期间,Activity会经历多种状态: Canceling、 Closed、 Compensating、 Executing、 Faulting、 Initialized |
|
用户跟踪行为 |
可以在Activity代码中用TrackData方法向Tacking服务提交自定义状态点 |
5.自定义Tacking Pofile将生成一个XML串,存入TrackingProfile表的TrackingProfileXml字段中
6.默认的Tacking Pofile以一个XML串的形式存于DefaultTrackingProfile表的TrackingProfileXml字段中
7.自定义Tacking Pofile只对指定的工作流有效,默认的Tacking Pofile对所有没有自定义Tacking Pofile的工作流有效。
8.如果所有工作流要使用同样的筛选,可以直接修改默认的Tacking Pofile,
9.如果同一对象已添加自定义的Tacking Pofile,使用默认方式再添加时,将出产生异常,该异常由UpdateTrackingProfile存储过程产生.
10.完全可以手工操作Pofile的XML串,也可以手工操作Tacking数据
一个TrackingProfile跟踪服务筛选类
四。 TrackingService,TrackingChannel自定义跟踪服务

WF提供一个tracking基本结构,可以用他去跟踪实例改变的数据与状态,
需要实现TrackingChannel 与TrackingServic这两个类,
TrackingChannel接收引擎发送的各种tracking记录,
TrackingServic为引擎提供了接口
引擎调用tracking服务是同步的,工作流实例执行一个阻塞直到从tracking服务有方法返回
WF的工作流引擎是个黑箱子,所有有关工作流实例运行的情况或事件只有WF引擎知道,Hosting如果想知道,那么需要一个查询的界面。Tracking就是这个查询界面
TrackingService实现
注:本文大部分来自:http://www.cnblogs.com/foundation/category/212578.html
浙公网安备 33010602011771号