代码改变世界

WF 4.0 beta1的跟踪配置

2009-06-22 08:31  Windie Chai  阅读(2128)  评论(4编辑  收藏  举报

上周我们介绍了WF 4.0 beta1中的跟踪机制。本文将继续深入介绍跟踪配置,并会解释如何使用它们来灵活地跟踪工作流的执行过程。

 

跟踪配置概览

当工作流实例的状态发生变化时,运行时会放出相应的事件,跟踪配置就允许你订阅这些事件。根据你的检测需求,如果只是订阅工作流的一小部分高级状态变化,那么配置的粒度就可能比较粗。另一方面,你也许会创建一个非常细粒度的配置,它的输出丰富程度足以重建工作流的执行过程。跟踪配置可以满足这些极端场景已经它们中间的任何场景。

跟踪配置以一种或两种方式表现它们自身。你可以用编程的方式创建跟踪配置,也可以在标准.NET配置文件中的<system.serviceModel>节中以XML元素的方式配置它们。本文会介绍基于配置文件的跟踪配置。下面是WF 4.0 beta1中的跟踪配置示例:


<system.serviceModel>

    …

    
<tracking> 

      
<trackingProfile name="High_Level_Tracking_Profile">

        
<workflow>

          
<workflowInstanceQuery>

            
<states>

              
<state name="Started"/>

              
<state name="Completed"/>

            
</states>

          
</workflowInstanceQuery>

        
</workflow>

      
</trackingProfile>       

    
</profiles>

  
</tracking>

    …

</system.serviceModel>

 

跟踪配置结构

跟踪配置被构建为事件的声明性订阅,或者允许你向工作流运行时“查询”特定事件记录的跟踪查询(Tracking Query)。WF 4.0 beta1提供了一些允许你订阅不同事件种类的查询类型,下面是其中最常用的几种,你可以进行尝试:

  • WorkflowInstanceQuery – 使用它来跟踪工作流实例的生命周期变化,比如StartedCompleted
  • ActivityQuery – 使用它来跟踪组成工作流的活动的生命周期变化。例如,你可能希望跟踪工作流实例中的“Send Email”活动每次完成的情况。
  • FaultPropagationQuery – 使用它来跟踪活动中发生的错误处理。FaultHandler每次处理错误时,都会发生此事件。
  • UserTrackingQuery – 使用它来跟踪定义在代码活动中的事件。后续的日志会介绍如何创建用户跟踪记录。

变量提取

在跟踪工作流的执行过程时,提取数据通常非常有用。在消费执行过程的跟踪记录时,它能够提供了额外的上下文信息。跟踪配置简化了它的实现。在WF 4.0中,你可以提前工作流中任何活动的变量。下面的活动查询示例来自于WCF and WF samples for .NET 4.0 Beta 1中提供的动手实验。它演示了如何在“GetStockPrice”活动完成后提取“StockSymbol”变量。


<activityQueries>

<activityQuery activityName="GetStockPrice">

<states>

<state name="Closed"/>

</states>

<variableQueries>

<variableQuery variable="StockSymbol"/>

</variableQueries>

</activityQuery>

</activityQueries>

注解(Annotation)

WF 4.0中的注解允许你用可以在编译之后进行配置的值来任意地标记跟踪记录。例如,你可能希望一些跨越多个工作流的跟踪记录可以标记为“Data Center”==“Contoso Data Center”。这样做会使得将来查找所有包含此标记的跟踪记录变得更加容易。想要达到此目的,可以像这样为跟踪查询添加一个注解:


<activityQueries>

<activityQuery activityName="GetStockPrice">

<states>

  
<state name="Closed"/>

</states>

<annotations>

<annotation name="Data Center" value="Contoso Data Center"></annotation>

</annotations>

</activityQuery>

</activityQueries>

预告

在本系列的下一篇文章中,我们将继续讨论WF 4.0中工作流跟踪 的扩展性。本系列将会继续深入讨论以下概念:

  • 通过创建UserTrackingRecords,以编程的方式放出自己的跟踪事件。
  • 通过创建自定义TrackingParticipants,以编程的方式消费事件。
  • 以编程的方式创建跟踪配置。

本文翻译自:http://blogs.msdn.com/endpoint/archive/2009/06/19/workflow-tracking-profiles-in-net-4-0-beta-1.aspx