淺談WF 4.0 beta1的跟蹤配置
之前我們介紹過《淺談 WF 4.0 Beta1中的跟蹤機制》,今天將繼續(xù)來談跟蹤配置的問題。
WF 4.0 beta1跟蹤配置概覽
當(dāng)工作流實例的狀態(tài)發(fā)生變化時,運行時會放出相應(yīng)的事件,跟蹤配置就允許你訂閱這些事件。根據(jù)你的檢 測需求,如果只是訂閱工作流的一小部分高級狀態(tài)變化,那么配置的粒度就可能比較粗。另一方面,你也許會 創(chuàng)建一個非常細粒度的配置,它的輸出豐富程度足以重建工作流的執(zhí)行過程。跟蹤配置可以滿足這些極端場景 已經(jīng)它們中間的任何場景。
跟蹤配置以一種或兩種方式表現(xiàn)它們自身。你可以用編程的方式創(chuàng)建跟蹤配置,也可以在標(biāo)準(zhǔn).NET配置文件 中的<system.serviceModel>節(jié)中以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跟蹤配置結(jié)構(gòu)
WF 4.0 beta1跟蹤配置被構(gòu)建為事件的聲明性訂閱,或者允許你向工作流運行時“查詢”特定事件記錄的跟 蹤查詢(Tracking Query)。WF 4.0 beta1提供了一些允許你訂閱不同事件種類的查詢類型,下面是其中最常用 的幾種,你可以進行嘗試:
WorkflowInstanceQuery – 使用它來跟蹤工作流實例的生命周期變化,比如Started 和Completed。
ActivityQuery – 使用它來跟蹤組成工作流的活動的生命周期變化。例如,你可能希望跟蹤工作流實例中 的“Send Email”活動每次完成的情況。
FaultPropagationQuery – 使用它來跟蹤活動中發(fā)生的錯誤處理。FaultHandler每次處理錯誤時,都會發(fā) 生此事件。
UserTrackingQuery – 使用它來跟蹤定義在代碼活動中的事件。后續(xù)的日志會介紹如何創(chuàng)建用戶跟蹤記錄 。
變量提取
在跟蹤工作流的執(zhí)行過程時,提取數(shù)據(jù)通常非常有用。在消費執(zhí)行過程的跟蹤記錄時,它能夠提供了額外的 上下文信息。跟蹤配置簡化了它的實現(xiàn)。在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中的注解允許你用可以在編譯之后進行配置的值來任意地標(biāo)記跟蹤記錄。例如,你可能希望一 些跨越多個工作流的跟蹤記錄可以標(biāo)記為“Data Center”==“Contoso Data Center”。這樣做會使得將來查 找所有包含此標(biāo)記的跟蹤記錄變得更加容易。想要達到此目的,可以像這樣為跟蹤查詢添加一個注解:
- <activityQueries>
- <activityQuery activityName="GetStockPrice">
- <states>
<state name="Closed"/> - </states>
- <annotations>
- <annotation name="Data Center" value="Contoso Data Center"></annotation>
- </annotations>
- </activityQuery>
- </activityQueries>
【編輯推薦】