共用方式為


工作流程中的批次狀態資訊

您的工作流程會定期將其狀態儲存至位於名為保存點之多個檢查點上的持續性儲存體 (Persistent Storage)。 如果工作流程中發生錯誤,執行階段引擎可能必須擷取已保存的資訊以傳回穩定的狀態。 如果有兩個以上的元件正在通訊,協調持續性通常很有用,這樣一來,就能使元件的狀態保持一致。 工作流程外部的服務會使用工作批次來保存狀態資訊。 這些服務會批次處理它們的工作項目,並且共用與工作流程相同的交易。 如果工作流程未認可交易,有些工作項目在保存點期間可能仍然由服務進行批次處理。

Windows Workflow Foundation 提供 IWorkBatchIPendingWork,以協助服務和工作流程執行個體保存狀態資訊。

在對工作流程啟始之服務的所有呼叫中,執行階段引擎在其執行緒呼叫內容中提供 IWorkBatch。 您的服務可以將暫止的工作項目加入至此工作批次,如此,執行階段引擎就能在單一交易中認可所有相關的工作項目。 若要將工作項目加入至批次或向批次註冊,請使用下列陳述式:

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

此外,您可以將 IPendingWork 傳遞至 ExternalDataEventArgs 的建構函式。

叫用元件時的動作順序

  1. 在初始化期間,工作流程會建立工作批次。

  2. 工作流程會將工作批次附加至元件上的方法叫用中。 服務可以透過使用 WorkflowEnvironment 類別來存取其任何方法中的工作批次。

認可點的動作順序

  1. 工作流程會建立一個交易。

  2. 工作流程會在工作批次上逐一查看並收集元件的所有工作項目,維持順序以建立工作批次。 工作流程會叫用元件上的 Commit 方法,傳遞至交易和工作批次。

  3. 元件會將工作批次中的工作加入至交易。

  4. 針對工作批次中附有工作項目的所有元件重複執行步驟 2 和 3。

  5. Commit 通知成功時,工作流程會認可對應的交易。

  6. 成功認可交易時,工作流程會在工作批次上逐一查看,並如同步驟 2 收集每個元件的所有工作項目。 工作流程會叫用每個元件的 Complete 方法,傳遞至對應的交易和工作批次。

工作流程錯誤時的動作順序

  1. 工作流程會識別有關錯誤範圍的所有工作項目並建構工作批次。

  2. 工作流程會為工作批次中的所有工作叫用每個唯一且完成狀態設定為 false 之 IPendingWorkComplete 方法。

  3. 如果工作批次屬於 TransactionScopeActivity 活動或 CompensatingTransactionScopeActivity 活動的子系內容,則工作流程會放棄工作批次中的所有工作。

  4. 從錯誤復原之後,執行階段會保留對所有剩餘工作批次項目的參考。 然後,在未來的保存點認可該工作。

重試工作批次交易

DefaultWorkflowCommitWorkBatchServiceSharedConnectionWorkflowCommitWorkBatchServiceSqlWorkflowPersistenceServiceSqlTrackingService 都具有重試工作批次認可的能力。 這個功能是透過 EnableRetries 屬性來啟用,允許這些服務在網路逾時、電腦重新開機、SQL Server 處理序重設時持續嘗試認可工作批次。

重試次數設定為 20。 前三次重試逐一立即發生。 之後,後續每次重試之間會有延遲。 應用程式可以調整它們的連線字串中的連線逾時,以部分調整重試之間的時間。

這個屬性可以透過程式設計方式或組態檔來設定。 如需如何以程式設計方式設定這個屬性的詳細資訊,請參閱每個服務上的 EnableRetries 屬性。 如需如何透過組態檔設定這個屬性的詳細資訊,請參閱Workflow Configuration Files

請參閱

概念

工作流程與應用程式通訊

其他資源

Using Transaction Services Sample
開發工作流程

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.