建立自訂持續性服務
您可以實作持續性服務將工作流程執行個體的執行階段狀態儲存至長期存放區,然後從該存放區擷取狀態。 在執行工作階段期間的某些認可點上,Windows Workflow Foundation 執行階段引擎會通知持續性服務保存工作流程的狀態資訊。 例如,這會發生於工作流程變成閒置時、TransactionScopeActivity 活動完成執行時,或主應用程式呼叫 Unload 方法時。
Windows Workflow Foundation 執行階段引擎本身不會保存狀態資訊。 在執行階段期間新增至引擎的自訂持續性服務會提供這個功能。 執行階段引擎會負責啟動持續性作業,而自訂持續性服務則負責儲存和載入所保存的狀態日期。
注意
如果您建立的工作流程使用 TransactionScopeActivity 活動、CompensatableTransactionScopeActivity 活動、CompensatableSequenceActivity 活動,或者使用採用 PersistOnCloseAttribute 屬性或實作 ICompensatableActivity 介面的自訂活動,則您必須指定要使用的持續性服務,否則在您執行工作流程時會擲回例外狀況。
建立自訂持續性服務
您可以藉由自 WorkflowPersistenceService 抽象基底類別衍生,來建立自訂持續性服務。 這個基底類別包含 5 個抽象方法,當您建立持續性服務時必須覆寫這些方法。 下表顯示這些方法。
方法 | 描述 |
---|---|
將指定的完成範圍載回記憶體中。 |
|
將工作流程執行個體的指定狀態載回記憶體中。 |
|
將指定的完成範圍儲存至資料存放區中。 |
|
將工作流程執行個體狀態儲存至資料存放區。 |
|
解除鎖定指定的工作流程執行個體狀態。 |
|
判斷當工作流程閒置一段時間時,是否將指定的工作流程執行個體保存至存放區。 |
如需示範 Windows Workflow Foundation 引擎如何透過自訂持續性服務儲存工作流程執行個體狀態來卸載工作流程的範例,請參閱Custom Persistence Service。
鎖定工作流程狀態資訊
Windows Workflow Foundation 執行階段引擎能夠鎖定工作流程狀態資訊,透過分隔在多個處理序中執行的持續性服務來防止載入單一工作流程。 但是,實際的鎖定機制是由自訂持續性服務本身實作的。 這表示當您建立持續性服務時該項鎖定支援是選擇性的。 當呼叫 SaveWorkflowInstanceState 時,和呼叫 LoadWorkflowInstanceState 時,如果您選擇支援鎖定工作流程狀態,則當解除鎖定參數設為 false 時,您應鎖定對工作流程狀態的存取。 工作流程狀態資訊應維持為鎖定,直到使用對 SaveWorkflowInstanceState 的後續呼叫將鎖定參數設為 true,或呼叫 UnlockWorkflowInstanceState 方法為止。 如果處理序嘗試載入狀態為鎖定的工作流程執行個體狀態,則您應擲回 WorkflowOwnershipException。
使用交易保存工作流程狀態資訊
如果您的自訂持續性服務使用長期存放區,則您應使用工作流程交易批次來延後寫入工作流程狀態資訊,直到到達工作流程認可點為止。 若要這麼做,請在您的自訂持續性服務類別中實作 IPendingWork 介面,並將表示暫停對長期存放區變更的工作項目新增至 WorkBatch 屬性。
請參閱
參考
概念
其他資源
Custom Persistence Service
Using Persistence Services
開發 Windows Workflow Foundation 服務
Copyright © 2007 by Microsoft Corporation. All rights reserved.