天天看點

WF中的跟蹤服務(2):使用SqlTrackingService

WF提供了可插拔的跟蹤服務,運作時引擎可以在其生存期過程中添加多個運作時服務,是以可以同時啟用多個不同類型的跟蹤服務。WF架構提供了一個現成的SqlTrackingService跟蹤服務,該服務将可配置的跟蹤資訊寫到Sql Server資料庫中,下面我們來看看如何使用SqlTrackingService跟蹤服務。 

跟蹤事件類型

工作流運作時在執行工作流時會引發某些事件。 跟蹤服務通過捕獲這些事件來記錄跟蹤資訊,工作流可以引發以下三種事件: 

1.工作流事件(workflow Events):工作流事件(workflow events)表示工作流狀态改變的事件,每次工作流狀态的改變都會引發跟蹤服務中的跟蹤事件,工作流事件定義在TrackingWorkflowEvent枚舉中,包括以下值:Created ,Completed,Idle,Suspended,Resumed,Persisted,Unloaded,Loaded,Exception,Terminated,Aborted,Changed,Started。

2.活動事件(Activity Events):活動事件表示活動狀态的改變,活動的狀态被定義在ActivityExecutionStatus枚舉中,如下:Initialized,Executing,Canceling,Closed,Compensating,Faulting

3.使用者事件(User Events): 在工作流事件(workflow events)和活動事件(Activity Events)中我們隻能跟蹤已經定義好的事件,有的時候我們需要工作流中特定位置的資訊,此時,我們就可以使用自定義跟蹤點,使用者跟蹤事件可以在整個工作流生命周期的任何位置。我們使用Activity的TrackData()方法來建立使用者跟蹤點。

SqlTrackingService跟蹤服務應用舉例

2.跟蹤資料庫建立完成後我們建立一個順序工作流控制台程式,在工作流設計器中我們隻要拖入一個CodeActivity活動即可,工作流的代碼如下:

<a href="http://11011.net/software/vspaste"></a>

4.我們還可以使用配置檔案的方式來使用SqlTrackingService,app.config代碼如下:

5.在宿主程式中我們需要使用重載的WorkflowRuntime構造函數來傳遞配置節名就可以了。 

using(WorkflowRuntimeworkflowRuntime = newWorkflowRuntime("WorkflowRuntime")

6.現在我們就使用了SqlTrackingService跟蹤服務,運作工作流我們會發現執行的結果隻顯示CodeActivity被執行了,并沒有看到我們的跟蹤資訊,實際上現在跟蹤資料已經存到的Sql Server的跟蹤資料庫了,不信你可以打開Sql Server資料庫中去檢視相應的表内容。

使用 SqlTrackingQuery 查詢跟蹤資料

1.上面我們看到了使用SqlTrackingService跟蹤服務後,跟蹤的資訊已經儲存到了資料庫中,但是我們直接去資料庫中檢視很不友善,SqlTrackingQuery 類提供了一些方法和屬性,可用于通路存儲在 SqlTrackingService 跟蹤資料庫中的跟蹤資料。 對此資料的通路是通過 SqlTrackingWorkflowInstance 對象提供的。 可以調用 TryGetWorkflow 方法來擷取特定工作流執行個體的 SqlTrackingWorkflowInstance。 還可以選擇調用 GetWorkflows 方法來擷取 SqlTrackingWorkflowInstance 對象的集合,這些對象對應于具有跟蹤資料的工作流執行個體,其中的跟蹤資料與一組包含在作為參數傳遞到方法的SqlTrackingQueryOptions 對象中的查詢參數相比對。

通過傳遞跟蹤資料庫的連接配接字元串,建立 SqlTrackingQuery 類的執行個體。 然後,可以調用TryGetWorkflow 或GetWorkflows 方法來得到SqlTrackingWorkflowInstance 對象或 SqlTrackingWorkflowInstance 對象的集合。 ActivityEvents 屬性包含 ActivityTrackingRecord 對象的集合,這些對象包含工作流中的活動的跟蹤資訊。 此外,還可以通過檢查包含在WorkflowEvents 集合中的 WorkflowTrackingRecord 對象,使用相同的過程來跟蹤工作流執行個體事件。 對于通過調用 TrackData 方法插入的使用者事件,UserTrackingRecord 對象将包含在 UserEvents 集合中,該集合也是在SqlTrackingWorkflowInstance 類中定義的。

2.下面我們對SqlTrackingQuery 自己封裝了一個類來将跟蹤資料查詢出來寫到控制台上,TrackingConsoleWriter.cs,該類我們會在以後的文章也會使用,現在雖然用不了該類的全部功能,但是先給出類的全部代碼:代碼如下:

4.下面是執行結果:

<a href="http://www.cnblogs.com/images/cnblogs_com/carysun/WindowsLiveWriter/SqlTrackingService_B858/SqlTrackingService1.jpg"></a>

使用者跟蹤的事件

1.一個User Track Point(使用者跟蹤點)是我們在工作流或是自定義活動中加入的。你可以加在任意的位置。我們如何建立使用者跟蹤點呢,我隻要調用Activity的TrackData方法就可以了。這樣你設定的使用者跟蹤點就會被跟蹤服務記錄下來,同樣是一條UserTrackingRecord。我們在CodeActivity中添加TrackData方法,代碼如下:

<a href="http://www.cnblogs.com/images/cnblogs_com/carysun/WindowsLiveWriter/SqlTrackingService_B858/SqlTrackingService2.jpg"></a>

3.從結果中我們可以看到紅色線部分就是我們自己加入的跟蹤點。

本文轉自生魚片部落格園部落格,原文連結:http://www.cnblogs.com/carysun/archive/2008/11/21/1338713.html,如需轉載請自行聯系原作者