理解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

    默认的TrackPointsXML字串配置文件

    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

    插入ProfileTrackingProfile表,(插入自定义筛选器到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 PofileTacking服务只记录实际需要的状态.

    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.完全可以手工操作PofileXML串,也可以手工操作Tacking数据

    一个TrackingProfile跟踪服务筛选类

     四。 TrackingServiceTrackingChannel自定义跟踪服务

      

    WF提供一个tracking基本结构,可以用他去跟踪实例改变的数据与状态,

    需要实现TrackingChannel TrackingServic这两个类,

    TrackingChannel接收引擎发送的各种tracking记录,

    TrackingServic为引擎提供了接口

    引擎调用tracking服务是同步的,工作流实例执行一个阻塞直到从tracking服务有方法返回

    WF的工作流引擎是个黑箱子,所有有关工作流实例运行的情况或事件只有WF引擎知道,Hosting如果想知道,那么需要一个查询的界面。Tracking就是这个查询界面


    TrackingService实现

     

     

     注:本文大部分来自:http://www.cnblogs.com/foundation/category/212578.html

     

posted @ 2010-12-27 17:01  kntao  阅读(355)  评论(0)    收藏  举报