Share via


WorkflowPersistenceService.SaveCompletedContextActivity(Activity) 方法

定義

在衍生類別中實作時,將指定的完成範圍儲存至資料存放區中。

protected public:
 abstract void SaveCompletedContextActivity(System::Workflow::ComponentModel::Activity ^ activity);
protected internal abstract void SaveCompletedContextActivity (System.Workflow.ComponentModel.Activity activity);
abstract member SaveCompletedContextActivity : System.Workflow.ComponentModel.Activity -> unit
Protected Friend MustOverride Sub SaveCompletedContextActivity (activity As Activity)

參數

activity
Activity

表示已完成範圍的 Activity

範例

下列範例示範 SaveCompletedContextActivity 方法的實作。 這個範例來自 FilePersistenceService.cs 檔案中的<自訂持續性服務>範例。 如需詳細資訊,請參閱 自訂持續性服務範例

// Save the completed activity state.
protected override void SaveCompletedContextActivity(Activity activity)
{
    Guid contextGuid = (Guid)activity.GetValue(Activity.ActivityContextGuidProperty);
    Console.WriteLine("Saving completed activity context: {0}", contextGuid);
    SerializeToFile(
        WorkflowPersistenceService.GetDefaultSerializedForm(activity), contextGuid);
}
' Save completed activity state
Protected Overrides Sub SaveCompletedContextActivity(ByVal activity As System.Workflow.ComponentModel.Activity)
    Dim contextGuid As Guid = CType(activity.GetValue(activity.ActivityContextGuidProperty), Guid)
    Console.WriteLine("Saving completed activity context: 0}", contextGuid)
    SerializeToFile( _
        WorkflowPersistenceService.GetDefaultSerializedForm(activity), contextGuid)
End Sub

備註

工作流程執行階段引擎會儲存已完成範圍活動的狀態以實作補償。 您必須呼叫其中一個多載的 Save 方法將 activity 序列化至 Stream 中,然後您可以選擇在將它寫入您的資料存放區之前進一步處理 Stream。 然而,當工作流程執行階段引擎呼叫 LoadCompletedContextActivity 時,您必須還原活動的相同複本。

工作流程執行個體完成或終止時,您必須能夠將完成的範圍與包圍它的工作流程執行個體產生關聯,以在您的資料存放區中將範圍標示為不需要的範圍。 因此,您也應該儲存與完成範圍關聯的工作流程執行個體的 Guid。這可以從與 InstanceId 關聯的 WorkflowInstanceactivity 屬性中取得。

LoadCompletedContextActivity 會接受完成範圍的 Guid 做為參數。 因此,您也必須儲存與 ContextGuid 關聯的 activity 屬性。 這個屬性可以透過 ActivityContextGuidPropertyactivity 欄位來加以參考。

如果您實作使用長期存放區的持續性服務,為了維持與工作流程執行階段引擎內部狀態的一致性,您應該參與工作流程異動批次處理,以延遲對您的長期存放區的實際寫入,直到工作流程認可點為止。 若要參與批次處理,請將代表暫停變更資料庫的工作項目加入至 WorkBatch 屬性中,然後在您的持續性服務中實作 IPendingWork 介面。

如果您無法將完成的範圍儲存至資料存放區中,則應該擲回有適當錯誤訊息的 PersistenceException

適用於