裝載 Windows Workflow Foundation 簡介
布吉斯達文卡亞文
項目經理
Microsoft Corporation
2006 年 8 月
適用於:
Windows Workflow Foundation
Microsoft .NET Framework 2.0
Microsoft .NET Framework 3.0
總結: 提供裝載 Windows Workflow Foundation 的應用程式 (WF) 如何管理和監視執行中的工作流程的概觀,並提供執行時間服務及其現用實作的概觀。 讀者應該熟悉 Microsoft .NET Framework、C# 和 WF 程式設計模型。 (16 個列印的頁面)
目錄
簡介
管理工作流程實例生命週期
管理性和監視
可靠性和高可用性
基底執行時間服務
結論
詳細資訊
簡介
本文適用于使用 Windows Workflow Foundation (WF) 的開發人員,以協助他們瞭解可讓應用程式管理及監視執行中工作流程實例的不同選項。 本文假設讀者對 Microsoft .NET Framework、C# 和 WF 有基本的瞭解。
WF 包含活動程式庫和架構、執行時間引擎,以及必須在主應用程式進程內執行的執行時間服務元件。 工作流程會建構為執行時間引擎所執行的活動集。 執行時間引擎必須在主應用程式進程內執行。 下圖顯示如何以主應用程式將工作流程、活動和工作流程執行階段引擎全部裝載在處理序中。
圖 1. Windows Workflow Foundation 主機進程
WF 提供執行時間引擎,負責工作流程執行和狀態管理。 WF 執行時間可以裝載在任何 .NET 進程中,包括 ASP.NET、Windows 服務、主控台應用程式和Windows Forms應用程式。 開發人員負責在建置已啟用工作流程的應用程式時撰寫此主機程式。 當執行時間服務管理工作流程執行時,執行時間服務會在主機進程中運作,以提供執行時間引擎的額外功能。
當您為 WF 實作主應用程式時,需要考慮許多問題。 本文提供主應用程式如何管理和監視工作流程的概觀,以及基底執行時間服務及其現成實作的摘要。
管理工作流程實例生命週期
WF 會在 WorkflowInstance 類別上提供現用的活動和控制作業方法,以管理工作流程狀態和生命週期。 管理工作流程實例生命週期一節說明各種工作流程實例特定的運行時間事件,以及這些事件與其與工作流程狀態關聯性之間的轉換。
持續點
工作流程經常長時間執行且有效率地閒置,等待使用者或其他系統的輸入繼續。 由於在記憶體中保存閒置工作流程並不實用,因此建議您將工作流程實例狀態保存到儲存媒體,直到工作流程收到正在等候的事件為止。 此外,儲存工作流程實例狀態有助於在程式稍後發生失敗時,從該點繼續工作流程。
圖 2 說明如何使用持續性點繼續執行工作流程實例。
圖 2. 使用持續性點繼續執行工作流程實例
如果工作流程實例狀態在點 B 保存,而失敗發生在 C 點,您的應用程式可以從點 B 繼續工作流程實例,而不會遺失點 A 與 B 之間的工作。不過,如果持續性服務無法使用,或工作流程實例狀態未保存,則從點 A 到 B 完成的工作會遺失。
如果 WorkflowPersistenceService 存在 (,請新增至 WorkflowRuntime 實例,) 工作流程執行時間引擎使用此服務將工作流程實例狀態保存到儲存媒體。 這可能會在下列幾點發生:
- 在以 PersistOnCloseAttribute (標示的活動完成時,交易範圍活動)
- 工作流程實例完成之前
- 工作流程實例終止之前
- 工作流程閒置時
- 呼叫 WorkflowInstance.Unload 或 WorkflowInstance.TryUnload 時
WF 執行時間引擎會在WorkflowPersistenceService上呼叫SaveWorkflowInstanceState () 方法,以儲存工作流程實例狀態。 它會呼叫 LoadWorkflowInstanceState () 方法,以在需要時擷取工作流程實例保存狀態。 工作流程執行時間會處理有關何時執行持續性的所有語意,而持續性服務則負責實際儲存和載入工作流程實例。 活動狀態和工作流程實例識別碼會序列化並儲存至持續性存放區。 此外,繼續工作流程實例執行的其他所有必要資訊 (例如,佇列) 會包含在序列化且已儲存的狀態中。
工作流程實例事件
工作流程實例可以是五種狀態之一: 已建立、 執行、 暫停、 已完成和 終止。 工作流程在工作流程實例的存留期內有 13 個事件。 這些事件可能表示轉換至不同的狀態。 例如, WorkflowCompleted 事件表示實例已從 [執行中] 轉換為 [已完成]。 某些事件不會指出實例已轉換為不同的狀態。 例如, WorkflowPersisted 事件表示實例為 Persisted,但仍處於執行中狀態。 在這些 13 個事件中,11 會透過運行時間事件和追蹤工作流程事件與主應用程式進行通訊。 變更和例外狀況兩個事件只會透過追蹤工作流程事件與主應用程式通訊。
WF 會在 WorkflowInstance 類別上提供控制作業方法,讓主應用程式能夠管理工作流程生命週期。 此外,應用程式也可以設定原則來管理工作流程生命週期。 例如,應用程式可以有卸載原則,以指示 WF 引擎卸載工作流程實例。 WF 提供可能會影響工作流程實例統計資料的現用活動。例如 ,SuspendActivity 和 TerminateActivity 活動可用來分別暫停和終止工作流程實例。 下列各節說明工作流程執行時間引發的各種工作流程實例特定事件,以傳達工作流程實例事件和工作流程實例的統計資料轉換。
WorkflowAborted
當工作流程執行時間引擎擲回記憶體內部實例時,工作流程實例會被視為中止。 主機應用程式可以藉由呼叫 WorkflowInstance.Abort () 來中止 工作流程實例。 您可以呼叫 WorkflowInstance.Resume () ,從其最後一個持續性點繼續中止的工作流程實例。 中止工作流程實例會用於應用程式決定捨棄從最後一個持續性點完成的所有工作,直到呼叫 WorkflowInstance.Abort () 為止。
WorkflowCompleted
當實例完成執行時,工作流程實例就會完成。 此時,主應用程式可以檢查佇列中的訊息,以及工作流程實例未取用的其他事件。
WorkflowCreated
當實例完全建構時,但在活動開始執行之前,就會建立工作流程。 工作流程實例是藉由呼叫數個 WorkflowRuntime.CreateWorkflow () 多載方法中的任何一個來建立。
WorkflowIdled
工作流程實例在等候外來事件 (計時器、訊息或其他自訂事件時閒置,) 繼續執行。 若要儲存系統資源,應用程式可以在閒置時將其卸載原則設定為從記憶體卸載工作流程實例。 如果主應用程式使用現成的 SqlWorkflowPersistenceService,您可以在應用程式組態檔中設定 UnloadOnIdle 旗標,以指示 WF 執行時間引擎在實例閒置時保存工作流程狀態。
WorkflowLoaded
當實例狀態從持續性存放區載入記憶體時,就會引發 WorkflowLoaded 事件。
WorkflowPersisted
當現成的 SqlWorkflowPersistenceService 或自訂持續性服務已新增至 WorkflowRuntime 實例時,工作流程實例會在工作流程實例狀態儲存至持續性存放區時保存。
WorkflowResumed
在暫止或中止的工作流程實例上呼叫 WorkflowInstance.Resume () 時,會繼續工作流程實例。
WorkflowStarted
呼叫WorkflowInstance.Start () 時,就會引發WorkflowStarted事件。 工作流程啟動事件會在工作流程執行時間引擎開始執行工作流程活動之前引發。
WorkflowSuspended
暫停工作流程實例是透過 WorkflowInstance.Suspend () 呼叫或 SuspendActivity 活動執行時完成。 因此,工作流程實例處於暫停狀態。
WorkflowTerminated
終止工作流程實例是透過 WorkflowInstance.Terminate () 呼叫、 TerminateActivity 活動執行時,或在執行中的工作流程實例中發生未處理的例外狀況時完成。 引發此事件之後,工作流程實例會處於終止狀態。
WorkflowUnloaded
當工作流程實例從記憶體卸載至持續性存放區時,就會引發 WorkflowUnloaded 事件。 這取決於持續性原則,或透過呼叫 WorkflowInstance.Unload () 或 WorkflowInstance.TryUnload () 來完成。
工作流程實例事件轉換
工作流程實例事件會透過工作流程運行時間事件和追蹤工作流程事件,與主機通訊。 主應用程式可以訂閱運行時間事件,或使用追蹤服務來收到通知。 例外狀況和已變更的事件只會透過追蹤服務與主應用程式通訊。 Exception 事件表示執行工作流程實例時發生例外狀況。 Changed 事件表示工作流程實例在執行時已動態更新。
圖 3 說明各種工作流程事件與工作流程狀態之間的轉換。
圖 3. 在工作流程事件與狀態之間轉換, (按一下影像以將其放大)
如果已啟用持續性服務,就會發生持續性點,如圖 3 所示。 這些主應用程式應該會在適用時看到 WorkflowPersisted、 WorkflowUnloaded和 WorkflowLoaded 事件。 如果工作流程實例不在記憶體中,且已啟用持續性服務,則實例上的任何有效作業都會 (Resume、 Abort、 Terminate等) 導致工作流程實例先載入,然後繼續滿足要求。 例如,如果您有暫停但卸載的工作流程實例,請在它上呼叫 Resume 會導致它先載入,然後繼續引發 Resumed 事件,如圖表所示。
工作流程實例作業
如先前所述, WorkflowInstance 類別具有控制工作流程實例生命週期的方法。 本節說明這些方法。
WorkflowInstance.Start ()
啟動所建立工作流程實例的執行。 WorkflowInstance.Start () 會導致工作流程執行時間引發 WorkflowStarted 事件,而工作流程實例處於執行中狀態。 如果在已啟動的工作流程實例上呼叫Start () ,則會擲回InvalidOperationException。
WorkflowInstance.Abort ()
中止工作流程執行個體。 當中止成功時,工作流程執行時間會引發 WorkflowAborted 事件。
WorkflowInstance.Load ()
將卸載的工作流程實例從持續性存放區載入記憶體中。 然後,實例會排程從它所在的狀態執行,然後再卸載它。 載入成功時,工作流程執行時間會引發 WorkflowLoaded 事件。
WorkflowInstance.Resume ()
繼續 (繼續執行暫停或中止的工作流程實例) 。 工作流程執行時間會在工作流程實例執行繼續之前引發 WorkflowResumed 事件。
WorkflowInstance.Suspend ()
暫停工作流程實例的執行。 當呼叫 WorkflowInstance.Suspend () 成功時,工作流程執行時間會引發 WorkflowSuspended 事件。
WorkflowInstance.Terminate ()
終止工作流程實例,並清除記憶體內部工作流程實例。 工作流程執行時間會通知已註冊的持續性服務,工作流程實例已從記憶體中清除。 針對 SqlWorkflowPersistenceService,這表示終止時,該工作流程實例的所有狀態資訊都會從資料庫中刪除。 您無法從先前儲存的持續性點重載工作流程實例。 當 WorkflowInstance.Terminate () 成功時,工作流程執行時間會引發WorkflowTerminated事件。
WorkflowInstance.Unload ()
將工作流程執行個體從記憶體卸載到持續性存放區中。 WorkflowInstance.Unload () 是同步的。 它會封鎖目前排程的工作完成,或達到交易範圍的結尾,才能順利執行卸載。 當 WorkflowInstance.Unload () 成功時,工作流程執行時間會引發WorkflowUnloaded事件。 如果在沒有已註冊的持續性服務時呼叫Unload () ,則會擲回InvalidOperationException。
WorkflowInstance.TryUnload ()
不同于 WorkflowInstance.Unload () , WorkflowInstance.TryUnload () 不會封鎖,直到可以卸載工作流程為止。 WorkflowInstance.TryUnload () 會將工作流程實例從記憶體卸載至持續性存放區,並在實例暫停或閒置時傳回 true 。 否則,呼叫會傳回 false。 如果沒有已註冊的持續性服務時呼叫TryUnload () ,則會擲回InvalidOperationException。
如需 WorkflowInstance上各種控制方法的詳細資訊,請參閱 Windows Foundation SDK。
管理性和監視
裝載工作流程的應用程式負責管理及監視其裝載和執行的工作流程。 WF 提供各種可管理性和監視工具的支援。 例如,WF 提供端對端追蹤,可讓您用於低階偵錯,也可以追蹤工作流程資料擷取和監視的基礎結構。
本節討論就地管理性和監視基礎結構,以及如何在主應用程式中使用它。
追蹤
WF 提供追蹤基礎結構,可在工作流程實例執行時擷取工作流程、活動和使用者事件和資料。 任何工作流程執行時間實例都可以有多個已註冊的追蹤服務,或無。 追蹤資訊會傳送至已註冊的追蹤服務。 追蹤服務會負責根據主應用程式的需求來儲存及處理此資訊。 WF 提供現成的 SQL 型追蹤服務, (SqlTrackingService) 主應用程式可以使用。 此外,主應用程式開發人員可以撰寫自己的自訂追蹤服務,並將其用於主應用程式。
您可以使用追蹤來檢查工作流程實例執行的歷程記錄,並判斷系統上執行的工作流程實例目前狀態。 此外,追蹤可以提供可與工作流程定義搭配使用的資訊,以預測系統上執行之工作流程實例的未來預期執行路徑。 WF 提供應用程式範例 工作流程監視器範例,此範例會使用現用的 SqlTrackingService 和工作流程設計工具控制項來顯示已完成和目前執行工作流程的工作流程和活動狀態資訊。
如需使用追蹤監視工作流程的詳細資訊,請參閱應用程式範例/工作流程監視器範例中的 工作流程監視器 SDK 工具 。 如需示範如何建置自訂追蹤服務的範例,請參閱技術範例/追蹤中的ConsoleTrackingService 範例和檔案追蹤服務和查詢範例。 如需示範如何使用現用 SqlTrackingService的範例,請參閱技術範例/Trackingout-of-box 中的 簡單追蹤範例 和使用 SQLTrackingService 範例進行查詢 。
追蹤和端對端追蹤
您可以使用追蹤來監視應用程式的健康情況,並隔離並修正問題,而不會干擾執行中的系統。 WF 使用 System.Diagnostics API 來追蹤工作流程執行時間和工作流程實例執行的相關資訊,包括規則集評估資訊。 根據預設,追蹤會關閉,但您可以視需要將其開啟。
此外,WF 也參與端對端追蹤。 端對端追蹤功能可讓追蹤檢視器檢視各種元件的接續追蹤資訊,以及這些元件之間的轉換。 這有助於端對端偵錯。
如果您使用應用程式組態檔,您必須新增下列專案,以啟用數個 WF 命名空間的記錄追蹤:
<system.diagnostics>
<switches>
<add name="System.Workflow LogToTraceListeners" value="1" />
<add name="System.Workflow.Runtime" value="All" />
<add name="System.Workflow.Runtime.Hosting" value="All" />
<add name="System.Workflow.Runtime.Tracking" value="All" />
<add name="System.Workflow.Activities" value="All" />
<add name="System.Workflow.Activities.Rules" value="All" />
</switches>
</system.diagnostics>
使用 LogToTraceListeners 時,WF 會列舉在主應用程式內建立的每個 TraceListener,並將所有記錄資訊傳送至它們。 範例中的其餘行可讓您指定要擷取記錄資訊的命名空間,以及追蹤的資訊量。 值屬性的可能值包括 All、Off、Critical、Error、Warning、Information 和 Verbose。 如需使用 value 屬性的詳細資訊,請參閱 WF SDK。
工作流程運行時間事件
運行時間事件是由工作流程執行時間引發,並提供主應用程式來管理工作流程執行時間和工作流程實例的生命週期。 事件處理常式是在 WorkflowRuntime 類別上定義,而主應用程式必須訂閱這些事件才能使用這些事件。
當主應用程式需要處理特定事件時,運行時間事件會作為輕量型通知系統,而不是儲存這些事件及其相關聯的資料以供查詢之用。 針對後者,建議您使用追蹤基礎結構。
WorkflowRuntime 的實例可能正在執行多個工作流程實例;每個工作流程實例都有自己的生命週期。 因此,工作流程實例事件的事件引數包含工作流程實例識別碼和其他資訊。 這項資訊可用來將事件與造成工作流程執行時間引發此事件的工作流程實例相互關聯。
下列各節說明可用的工作流程運行時間事件。
WorkflowRuntime.ServiceExceptionNotHandled
當服務擁有的執行緒擲回例外狀況時,就會引發此事件。 衍生自 WorkflowRuntimeService 類別的服務可以呼叫 RaiseServicesExceptionNotHandledEvent () 方法,通知 ServicesExceptionNotHandled 事件訂閱者在其執行期間發生例外狀況,而且無法處理此例外狀況。 現用服務會在這類情況下引發此事件。 主應用程式可以訂閱此事件,以實作復原機制。 與此事件相關聯的事件引數是 ServicesExceptionNotHandledEventArgs。
WorkflowRuntime.Started
當 WorkflowRuntime 的指定實例啟動時,就會引發這個事件。 與此事件相關聯的事件引數是 WorkflowRuntimeEventArgs。
WorkflowRuntime.Stopped
當 WorkflowRuntime 的指定實例停止時,就會引發這個事件。 與此事件相關聯的事件引數是 WorkflowRuntimeEventArgs。
表 1. WorkflowInstanceEvents
事件 | 描述 | 事件引數 |
---|---|---|
WorkflowAborted | 中止工作流程實例時引發。 | WorkflowEventArgs |
WorkflowCompleted | 工作流程實例完成時引發。 | WorkflowCompletedEventArgs |
WorkflowCreated | 當完全建構工作流程實例,但在處理活動之前引發;也就是說,工作流程開始執行之前。 | WorkflowEventArgs |
WorkflowIdled | 當工作流程實例進入閒置狀態時引發;也就是說,工作流程實例正在等候外來事件 (例如計時器、訊息等) 繼續執行。 | WorkflowEventArgs |
WorkflowLoaded | 當工作流程實例載入記憶體時引發,通常是從持續性存放區。 | WorkflowEventArgs |
WorkflowPersisted | 保存工作流程實例時引發。 | WorkflowEventArgs |
WorkflowResumed | 當工作流程實例繼續執行時引發,通常是從已暫停或中止的狀態。 | WorkflowEventArgs |
WorkflowStarted | 當工作流程實例開始執行時引發。 | WorkflowEventArgs |
WorkflowSuspended | 暫停工作流程實例時引發。 | WorkflowSuspendedEventArgs |
WorkflowTerminated | 終止工作流程實例時引發。 | WorkflowTerminatedEventArgs |
WorkflowUnloaded | 當工作流程實例從記憶體卸載至持續性存放區時引發。 | WorkflowEventArgs |
如需各種事件的詳細資訊,以及工作流程如何進入各種狀態,請參閱本文稍早的一節。
如需如何使用各種工作流程運行時間事件的資訊,請參閱 Windows Workflow Foundation SDK 範例。
效能計數器
您可以使用 Windows 效能工具來監視工作流程效能。 它由兩個部分組成:系統監視器和效能記錄和警示。 透過效能記錄和警示,您可以設定效能計數器來記錄效能資料,並設定系統警示,以在指定的計數器值高於或低於定義的閾值時通知您。
WF 提供一組效能計數器,其中包含可用來追蹤工作流程效能的 WF 效能物件。 如需效能計數器的完整清單,請參閱 WF SDK 中的 工作流程效能計數器 一節。
如需如何將效能計數器新增至效能工具的詳細資料,請參閱 Microsoft TechNet 網站。
卸載原則
系統可能會在指定時間同時執行數千個工作流程。 讓所有專案都保留在記憶體中可能會變得不切實際。 若要更妥善地管理系統的資源,您可以設定卸載原則來保存工作流程狀態,並從記憶體卸載它們。
如果您使用現用持續性服務,WF 會在閒置原則上提供卸載。 當您在SqlWorkflowPersistenceService類別上設定UnloadOnIdle屬性時,原則會作用中,以指示執行時間引擎在閒置時卸載工作流程。 如果主應用程式透過組態檔啟用 SqlWorkflowPersistenceService ,您可以將 UnloadOnIdle 旗標設定為 true來執行此動作。 如果 SqlWorkflowPersistenceService 是透過程式碼建構並啟用,主應用程式必須使用 SqlWorkflowPersistenceService (String、Boolean、TimeSpan、TimeSpan) 建構函式來建構它。 您的主應用程式可以實作其他複雜的卸載原則。
此外,您可以呼叫 WorkflowInstance.Unload () 方法來要求從記憶體卸載此特定的工作流程實例,並保存其狀態。 主應用程式稍後可以在實例上呼叫 Load () 方法,以繼續從最後一個持續性點執行它們。 卸載工作流程實例時,會引發 Runtime 事件 WorkflowUnloaded 事件。
可靠性和高可用性
WF 支援選擇可靠且高可用性的主機,方法是提供下列支援:
SQL 叢集
現用 SQL 服務支援叢集安裝。 將批次認可至SQL Server時,WF 現成可用的 SQL 服務會提供重試。 因此,支援容錯移轉案例或暫時無法存取的 SQL Server。 您可以在下列任一服務的組合上設定重試邏輯:
- DefaultWorkflowCommitWorkBatchService
- SharedConnectionWorkflowCommitWorkBatchService
- SqlTrackingService
- SqlWorkflowPersistenceService
根據預設,重試邏輯為 OFF。 主應用程式必須明確開啟重試邏輯,才能使用此功能。 應用程式可以選擇針對每個服務或先前提及的所有服務啟用重試。 您可以在服務類別上設定 EnableRetries 屬性,或透過組態檔來執行此動作。 使用組態檔時,主應用程式可以使用共用旗標 EnableRetries,在所有受影響的服務上將啟用重試設定為 ON 或 OFF。 如果在服務上設定 EnableRetries 屬性,其值會覆寫 EnableRetries 共用旗標值。 WF 現成可用的 SQL 服務會重試常數次。 無法設定重試次數。 不過,應用程式可以調整服務連接字串中的連線逾時,以部分調整重試之間的時間。
設定重試
下列範例示範如何新增通用參數EnableRetries,並將其值設定為True,以設定所有現成可用的服務。 它示範如何新增此服務的EnableRetries旗標,並將其設定為False,以停用 SqlWorkflowPersistenceService 的EnableRetries。
<WorkflowRuntime Name="SampleApplication" UnloadOnIdle="false">
<CommonParameters>
<add name="ConnectionString" value="Initial Catalog=WorkflowStore;Data Source=localhost;Integrated Security=SSPI;" />
<add name="EnableRetries" value="True" />
</CommonParameters>
<Services>
<add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService,
System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" EnableRetries="False" />
</Services>
</WorkflowRuntime>
一般而言,建議您將所有服務的重試設定為 ON 或 OFF。
請注意, WorkflowCommitWorkBatchService 類別負責重試所有非TransactionScopeActivity 活動的相關批次認可, (持續性點) 。 WorkflowCommitBatchService類別無法針對TransactionScopeActivity活動重試工作批次認可。 這是因為在此情況下,它並未啟動交易,因此不會擁有它。 TransactionScopeActivity活動的重試工作批次認可必須模型化為工作流程。 這通常是以 while 迴圈的形式和 TransactionScopeActivity外部的例外狀況處理常式來完成。
在現成的 SqlTrackingService上重試,如果以非交易模式執行,且現成可用的 SqlWorkflowPersistenceService 會控制與工作批次認可無關的 SQL 相關工作。 這包括檢查過期的計時器和載入工作流程實例。
負載平衡和Front-End調整
裝載 WF 的應用程式負責管理負載平衡案例和前端調整案例。 WF 在引擎和現成可用的 SQL 服務中提供支援,讓不同的主應用程式實例指向相同的持續性或追蹤 SQL 資料庫。
如果您有多個主應用程式連線到相同的持續性存放區,其中任何一個應用程式都可以從資料庫載入任何工作流程實例類型。 WF 現成的 SqlWorkflowPersistenceService 不支援在共用相同持續性存放區時,在特定主機上載入的工作流程類型或實例指派。 如果此行為不符合主應用程式需求,您必須實作自訂持續性服務。
當多個主機應用程式使用相同的持續性存放區時,WF 執行時間引擎會提供鎖定語意來支援前端調整案例。 鎖定語意可防止應用程式載入已由另一個應用程式載入的工作流程實例。 WorkflowPersistenceService類別可讓您提供參數給 SaveWorkflowInstanceState () 方法,以指定工作流程實例的狀態資訊是否應該在資料存放區中解除鎖定,以及提供UnlockWorkflowInstanceState () 方法來解除鎖定先前鎖定的工作流程狀態資訊,來支援此工作流程執行時間引擎功能。 在實作鎖定的持續性服務中, LoadWorkflowInstanceState () 方法的呼叫應該鎖定工作流程實例的狀態資訊。
如需工作流程實例鎖定語意的詳細資訊,請參閱 WF 程式設計指南中的Windows 工作流程持續性服務和建立自訂持續性服務一節。
基底執行時間服務
WF 執行時間引擎會使用執行時間服務來執行工作流程。 執行時間服務模型可讓主應用程式彈性地將各種服務提供給 WF 執行時間引擎。 本節說明 WF 所提供的執行時間服務,以及這些服務的現用實作。
如需執行時間服務實作的詳細資訊,請參閱 WF 程式設計指南中的 Windows Workflow Foundation Services 和 開發 Windows Workflow Foundation Services 小節。
WF 執行時間提供四項服務。 這些服務具有現成可用的實作,或者,主應用程式可以實作自己的服務,並將其提供給工作流程執行時間。
工作流程交易服務
Windows 工作流程交易服務 (WorkflowCommitWorkBatchService) 的目的是要針對工作批次的承諾啟用自訂邏輯, (也稱為 持續性點) 。 認可工作批次時,執行時間會呼叫目前的交易服務,並傳遞委派來呼叫 以執行實際認可工作批次。 執行階段仍然必須進行認可,但讓服務將本身插入處理序中將可讓認可處理序具備部分自訂能力。
WF 架構不支援將您自己的交易從外部帶入工作流程實例的能力。 WorkflowCommitWorkBatchService唯一支援的環境交易類型是工作流程實例所產生的交易。 執行工作流程執行時間之主應用程式所產生的環境交易會暫時從目前的執行緒中移除,以減少其副作用。 在工作流程閒置之後,所包含的主應用程式原始環境交易會放線上程中。
WF 為交易服務提供兩個現用實作: DefaultWorkflowCommitWorkBatchService 和 SharedConnectionWorkflowCommitWorkBatchService。
WF 執行時間引擎需要工作流程交易服務。 根據預設,它會使用 DefaultWorkflowCommitWorkBatchService。 主應用程式可以選擇以SharedConnectionDefaultWorkflowCommitWorkBatchService或自訂服務取代DefaultWorkflowSchedulerService。
DefaultWorkflowCommitWorkBatchService
當工作流程執行時間引擎啟動時,會建立 DefaultWorkflowCommitWorkBatchService 的實例,並在未新增其他交易服務時新增至 WorkflowRuntime 。 此服務會為每個資料庫連接建立.NET Framework交易。 例如,不會共用 SQL 追蹤服務和 SQL 持續性服務之間的連線。 您可以在工作流程中使用此服務來支援資料完整性所需的交易。
SharedConnectionWorkflowCommitWorkBatchService
這個服務是用於在不同物件之間使用共用連線的資料庫交易。 如果主應用程式想要使用此服務,它應該使用AddService方法或透過組態檔將其新增至WorkflowRuntime。
工作流程排程器服務
工作流程排程器服務會管理工作流程執行時間引擎排程工作流程實例的方式,無論是以非同步或手動同步模式處理。 WF 提供 WorkflowSchedulerService的兩個現用實作: DefaultWorkflowSchedulerService 和 ManualWorkflowSchedulerService。
WF 執行時間引擎需要工作流程排程器服務來執行工作流程。 根據預設,它會使用 DefaultWorkflowSchedulerService。 主應用程式可以選擇以ManualWorkflowSchedulerService 或自訂服務取代 DefaultWorkflowSchedulerService。
DefaultWorkflowSchedulerService
DefaultWorkflowSchedulerService 會 建立和管理在工作流程執行時間引擎上以非同步方式執行工作流程實例的執行緒,並包含讓多個工作流程實例排入運行時間表程集區的預設支援。 如果未將其他工作流程排程器服務實例新增至 WorkflowRuntime,它預設會使用 DefaultWorkflowSchedulerService 。
ManualWorkflowSchedulerService
ManualWorkflowSchedulerService 用於同步執行工作流程實例。 如果使用這項服務,工作流程實例會在來自主應用程式的呼叫執行緒上執行,因此會封鎖主應用程式的執行,直到工作流程實例變成閒置為止。
工作流程持續性服務
持續性服務負責儲存和擷取 (載入和卸載工作流程實例狀態) 。 WF 提供持續性服務的現用 SQL 型實作: SqlWorkflowPersistenceService。
SqlWorkflowPersistenceService
此現用實作會儲存狀態和計時器資訊,以SQL Server/MSDE。 SqlWorkflowPersistenceService會參與工作流程交易,並實作鎖定存取。 此外, SqlWorkflowPersistenceService 提供在 SQL Server 無法使用時啟用重試的功能。 這可以透過在服務上設定 EnableRetries 屬性來控制。 如需 SqlWorkflowPersistenceService的詳細資訊,請參閱 WF 程式設計手冊。
工作流程追蹤服務
追蹤服務會管理追蹤設定檔和追蹤資訊的儲存。 WF 提供 SqlTrackingService 類別中實作之追蹤服務的現成 SQL 型實作。
SqlTrackingService
此實作會儲存追蹤設定檔和資料,以SQL Server/MSDE。 此服務支援下列專案:
預設會參與工作流程交易;行為是由 SqlTrackingService.IsTransactional 屬性所控制。
提供一種機制,讓所有類型使用預設追蹤設定檔,或讓每個工作流程類型或工作流程實例的追蹤設定檔產生關聯。
藉由提供即時和隨選資料分割功能,支援資料維護。
Detailed information about data maintenance is provided in the Data Maintenance with SqlTrackingService section in the WF Programming Guide.
此外,WF 提供 SqlTrackingQuery API,可讓您用來查詢 儲存在 SqlTrackingService中的追蹤資料。 如需 SqlTrackingService的詳細資訊,請參閱 WF 程式設計手冊。
結論
WF 提供執行時間引擎和服務,以執行工作流程及管理其狀態。 主應用程式或進程必須寫入裝載 WF 工作流程。 此主應用程式負責將各種執行時間服務提供給工作流程執行時間引擎。 WF 現用執行時間服務旨在解決常見案例。 不過,如果現用服務不符合主應用程式的需求,主應用程式應該實作自訂服務,並將它提供給工作流程執行時間。
此外,WF 提供基礎結構來管理及監視執行中的工作流程實例,以及支援選擇可靠且高可用性的主應用程式。 主應用程式應該根據主控特定案例來決定如何使用各種選項。
詳細資訊
本文與下列資源一起,應協助不熟悉工作流程技術的開發人員瞭解技術,並快速提高生產力。
-
MSDN 工作流程開發人員中心
- 包含網路廣播和實驗室的檔和連結。
- 社群網站範例
-
Windows SDK 檔
- 如果您沒有 Windows Foundation SDK,請從 Windows SDK 網站下載。 Windows 工作流程 SDK 是 Windows SDK 的一部分。 它包含 WF 程式設計指南參考、API 參考,以及各種 技術和應用程式範例。
-
MSDN 工作流程論壇
- 討論論壇,可提供 WF 執行時間裝載或 WF 一般相關問題的解答。
關於作者
此為 Microsoft Corp.Redmond, WA 的 WF 小組的專案經理,是一位程式經理。 自 2000 年加入 Microsoft 以來,他正努力開發各種伺服器元件,並協助提供四個伺服器產品,包括 Microsoft BizTalk Server。 在 Microsoft 工作之前,在 Microsoft 之前,一位軟體工程師、商務分析師和客戶經理,位於 ITWorx、一家卡達、卡達、卡達達。