首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

WF 框架程式設計:追蹤服務與監控機制詳解

     編輯:關於C#

1. 架構分析

WF 允許在 WorkflowRuntime 加入多個 TrackingService 衍生類,支援不同業務需求;但僅有一個追蹤接聽器 (TrackingListener) 接收所有事件通知。接聽器查詢各追蹤服務的設定檔 (TrackingProfile) 決定追蹤哪些工作流類型的哪些資訊子集。

TrackingProfile 本質是追蹤點集合,定義何時擷取何種資料。可透過圖形化工具設定(參考 TrackingProfileDesigner 範例)。

2. 設計思路

2.1 靜態結構

工作流實例以執行緒運行,引擎僅依賴 TrackingService。TrackingService 負責提供 TrackingProfile 與 TrackingChannel:前者定義監控哪些狀態,後者定義如何持久化擷取資訊。預設 Profile 記錄所有實例狀態、活動狀態、使用者追蹤行為。

2.2 TrackingProfile 結構

由 TrackingPointCollection 構成。MatchingLocations 指定要追蹤的事件,ExcludedLocations 排除不需收集的事件。

加入 UserData

實務上需追蹤發起角色、指派角色、處理人、時間等。在自訂 Activity 中呼叫 TrackData(object userData) 或 TrackData(string key, object userData) 觸發使用者追蹤事件。

2.3 預設 SqlTrackingService 使用流程

  1. workflowRuntime.AddService(new SqlTrackingService(connStr))
  2. SqlTrackingQuery.TryGetWorkflow 取得 SqlTrackingWorkflowInstance
  3. 取得三類記錄集合:WorkflowEvents、ActivityEvents、UserEvents

WorkflowTrackingRecord: 實例狀態變更(Created、Started、Completed、Suspended、Terminated 等)與時間。
ActivityTrackingRecord: 活動狀態(Executing、Closed、Faulting 等)、類型、ContextGuid、時間、名稱等。
UserTrackingRecord: 使用者自訂資料。

3. 自訂監控實作

  • TrackingService 為抽象類,採工廠模式加入 Runtime。
  • 需實作自訂 TrackingProfile (容器) 與 TrackingChannel (抽象類,Send 處理記錄持久化,InstanceCompletedOrTerminated 流程結束時呼叫)。
  • TrackingProfile 可序列化為 XML 字串儲存(TrackingProfileSerializer)。
  • 掛載自訂 Profile:預設 SqlTrackingService 可用 ProfileUpdated 事件;自訂服務自行管理。
  • TrackingCondition 篩選:如 ActivityTrackingCondition("Priority", "High") 僅追蹤高優先級活動;ActivityDataTrackingExtract("To") 擷取活動屬性值。

4. 圖形化監控

Web 方式:序列化設計器標記 (MarkupSerializer) 為 XOML,呼叫 view.SaveWorkflowImage 生成圖片回傳。WinForm 參考 WorkflowManager 範例。
實例分析:StarterKit。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved