Windows 工作流程持續性服務
許多商務程序要花很長的時間才能完成 (可能長達數月,甚至數年)。 將工作流程保存在記憶體中,不僅不切實際 (記憶體限制的緣故),而且也不能進行擴充,因為同一個執行個體必須在單一伺服器上處理。 許多這類長時間執行的工作流程並不會主動執行流程或處理序邏輯,而是會有效地處於閒置狀態,等待使用者或其他系統的輸入。 透過卸載閒置的執行個體,主應用程式 (Host Application) 就可以節省記憶體,並在多台處理伺服器之間啟用延展性 (Scalability)。
當工作流程執行中發生特定的狀況時,如果執行階段中已載入持續性服務時,則工作流程執行階段引擎會使用持續性服務來保存有關工作流程執行個體的狀態資訊。 這些狀況包含下列事項:
TransactionScopeActivity 活動和 CompensatableTransactionScopeActivity 活動中不可部分完成的交易 (Atomic Transaction) 完成時。
工作流程執行個體閒置且 WorkflowPersistenceService 的 UnloadOnIdle 旗標設為 true 時。 例如,當您使用 DelayActivity 活動時便會發生這個狀況。
當執行階段主應用程式在工作流程執行個體上呼叫 System.Workflow.Runtime.WorkflowInstance.Unload 或 System.Workflow.Runtime.WorkflowInstance.TryUnload 時。
當工作流程執行個體終止或完成時。
當使用 PersistOnCloseAttribute 屬性的自訂活動完成時。
如果符合上述狀況中的一個,且已將持續性服務新增至執行階段引擎,則執行階段引擎會呼叫持續性服務提供的方法,以儲存有關工作流程執行個體的狀態資訊。 同樣地,當工作流程執行階段引擎需要還原之前保存的工作流程執行個體時,它會呼叫持續性服務所提供的方法以載入此狀態資訊。 換句話說,工作流程執行階段引擎會判斷何時應發生保存,但是會由持續性服務來決定執行必要的持續性作業。
另一個由 SqlWorkflowPersistenceService 管理的工作流程狀態是計時器資訊。 每次您在工作流程定義內設定 DelayActivity 活動並使用 SqlWorkflowPersistenceService 這類的持續性服務時,與活動相關聯的時間範圍資訊會保存為工作流程狀態的一部分。 每次工作流程執行階段評估工作流程執行個體時,會處理暫止的計時器事件。
建立持續性服務
您可以藉由衍生自 WorkflowPersistenceService 類別的類別來建立持續性服務。 您可以藉由呼叫 AddService,或在應用程式組態檔中建立適當的項目,來將您的持續性服務加入至工作流程執行階段引擎。 Windows Workflow Foundation 提供 SqlWorkflowPersistenceService 類別,這是一種您可以依原狀使用或加以擴充的預設持續性服務。 如需建立自訂持續性服務的詳細資訊,請參閱建立自訂持續性服務。 如需使用 SqlWorkflowPersistenceService 類別的詳細資訊,請參閱使用 SqlWorkflowPersistenceService。
注意
WorkflowRuntime 必須只包含一個持續性服務。
鎖定工作流程狀態資訊
工作流程執行階段引擎具有鎖定工作流程狀態資訊的語意,當執行於不同處理序中的持續性服務可能具有同一個資料存放區的存取權時便可使用這類語意。 WorkflowPersistenceService 類別可讓您支援工作流程執行階段引擎的這個功能,方式是提供參數給 SaveWorkflowInstanceState,它可指定是否應解除鎖定資料存放區中工作流程執行個體的狀態資訊,並且提供 UnlockWorkflowInstanceState 方法以解除鎖定先前鎖定的工作流程狀態資訊。 在實作鎖定的持續性服務中,呼叫 LoadWorkflowInstanceState 應會鎖定工作流程執行個體的狀態資訊。
在建立您自己的持續性服務時,如果服務沒有將狀態資訊儲存至其資料存放區或從其資料存放區載入狀態資訊,則會擲回 PersistenceException。 工作流程執行階段引擎需要這個行為。
持續性服務批次行為
系統提供批次處理機制給使用長期存放區儲存工作流程狀態資訊的服務。 在這些情況中,保持持續性服務使用的長期存放區與工作流程執行階段引擎內部狀態之間的一致性相當重要。 您可以將 IPendingWork 介面定義的功能新增至您的服務,然後透過將您資料存放區的變更當做工作項目新增至 WorkBatch,來參與 WorkflowCommitWorkBatchService 服務所提供的工作流程交易批次處理。 如需詳細資訊,請參閱 SaveCompletedContextActivity 或 SaveWorkflowInstanceState。
複雜裝載案例
有一種 Windows Workflow Foundation 方案的部署案例是建立多個主應用程式,每個都有一組不同的服務在不同的桌面和伺服器組態上執行。 在這種案例中可能會要求方案中定義的某些工作流程只能在某些系統上執行。 Windows Workflow Foundation 中的預設服務,如 SqlWorkflowPersistenceService 服務,並不支援這類組態。 若要控制哪一個系統上要載入哪一個工作流程執行個體,您必須建立自訂持續性服務。 如需詳細資訊,請參閱建立自訂持續性服務。
請參閱
參考
SqlWorkflowPersistenceService
SqlPersistenceWorkflowInstanceDescription
WorkflowPersistenceService
WorkBatch
概念
使用 SqlWorkflowPersistenceService
建立自訂持續性服務
其他資源
Windows Workflow Foundation 服務
練習 4:使用執行階段服務
Using Persistence Services
Copyright © 2007 by Microsoft Corporation. All rights reserved.