第五章聚焦 WF 可選服務中的 追蹤。介紹服務架構、SqlTrackingService 部署、資料庫腳本、自訂追蹤事件、追蹤設定檔過濾、TrackingProfileSerializer 持久化設定檔,以及 WorkflowMonitor 圖形化監視工具使用。
WF 核心服務皆為抽象基類(TrackingService、WorkflowPersistenceService 等),實際使用衍生實作(SqlTrackingService、DefaultWorkflowSchedulerService)。開發者按需「像點菜一樣」加入服務。
| 基礎服務 | 功能 |
|---|---|
| TrackingService | 追蹤基礎介面 |
| WorkflowPersistenceService | 持久化基礎 |
| WorkflowRuntimeService | 運行時核心服務 |
| WorkflowSchedulerService | 執行緒排程 |
| WorkflowQueuingService | 佇列管理 |
| WorkflowSubscriptionService | 訂閱/計時器 |
| WorkflowTransactionService | 交易服務 |
追蹤物件分兩大類:
SqlTrackingQuery、SqlTrackingWorkflowInstance 等,從資料庫查詢追蹤記錄。TrackPoint)、位置(TrackingLocation),定義「追蹤什麼、在哪裡追蹤」。詳細描述類再分三組:活動事件(ActivityTrackingPoint/Location)、工作流事件(WorkflowTrackingPoint/Location)、使用者事件(UserTrackingPoint/Location)。
WorkflowTracking。Tracking_Schema.sql 建立資料表/角色。Tracking_Logic.sql 建立預存程序。
TrackedWorkflow,加入 IfElse 分支:左分支含 Code→Delay(10秒)→Code,右分支無動作。IfElse 條件 QueryDelay 彈出詢問是否執行延遲。app.config 設定連線字串,WorkflowFactory 註冊 SqlTrackingService。

主程式 Program.cs 使用 SqlTrackingQuery.TryGetWorkflow 取得 SqlTrackingWorkflowInstance,遍歷 ActivityEvents(活動狀態/時間/完整名稱)與 WorkflowEvents(工作流事件/時間)輸出至主控台。

活動基類提供 TrackData(object) 或 TrackData(string, object)。在 PreDelayMessage、PostDelayMessage 中呼叫 this.TrackData("Delay commencing/completed"),資料寫入 UserEvent 表。

預設追蹤所有事件,產生大量資料。TrackingProfile 定義「關注點」,僅記錄指定事件。以代碼建構 TrackingProfile:
ActivityTrackingLocation 指定型別 Activity、MatchDerivedTypes=true、關注 Executing 狀態。WorkflowTrackingLocation 關注 Started、Idle 事件。1.0.0.0),透過 TrackingProfileSerializer 序列化為 XML,使用 ADO.NET 呼叫預存程序 dbo.UpdateTrackingProfile 寫入資料庫。套用設定檔後,輸出僅含指定事件,大幅減少資料量。

WFSamples.zip 解壓 WorkflowMonitor.sln 並編譯。WorkflowMonitor.exe 複製至工作流輸出目錄(bin\Debug),確保工作流組件可被載入。實務建議:生產環境務必套用追蹤設定檔,避免資料庫膨脹。WorkflowMonitor適合開發/測試階段診斷;正式環境可自行開發儀表板查詢SqlTrackingQuery。