之前我们介绍过《浅谈 WF 4.0 Beta1中的跟踪机制》,今天将继续来谈跟踪配置的问题。
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>
WF 4.0 beta1跟踪配置结构
WF 4.0 beta1跟踪配置被构建为事件的声明性订阅,或者允许你向工作流运行时“查询”特定事件记录的跟 踪查询(Tracking Query)。WF 4.0 beta1提供了一些允许你订阅不同事件种类的查询类型,下面是其中最常用 的几种,你可以进行尝试:
WorkflowInstanceQuery – 使用它来跟踪工作流实例的生命周期变化,比如Started 和Completed。
ActivityQuery – 使用它来跟踪组成工作流的活动的生命周期变化。例如,你可能希望跟踪工作流实例中 的“Send Email”活动每次完成的情况。
FaultPropagationQuery – 使用它来跟踪活动中发生的错误处理。FaultHandler每次处理错误时,都会发 生此事件。
UserTrackingQuery – 使用它来跟踪定义在代码活动中的事件。后续的日志会介绍如何创建用户跟踪记录 。
变量提取
在跟踪工作流的执行过程时,提取数据通常非常有用。在消费执行过程的跟踪记录时,它能够提供了额外的 上下文信息。跟踪配置简化了它的实现。在WF 4.0 beta1中,你可以提前工作流中任何活动的变量。下面的活 动查询示例来自于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 beta1中的注解允许你用可以在编译之后进行配置的值来任意地标记跟踪记录。例如,你可能希望一 些跨越多个工作流的跟踪记录可以标记为“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>
【编辑推荐】