WorkflowPersistenceService.SaveCompletedContextActivity(Activity) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在衍生類別中實作時,將指定的完成範圍儲存至資料存放區中。
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)
參數
範例
下列範例示範 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 關聯的 WorkflowInstance 的 activity
屬性中取得。
LoadCompletedContextActivity 會接受完成範圍的 Guid 做為參數。 因此,您也必須儲存與 ContextGuid 關聯的 activity
屬性。 這個屬性可以透過 ActivityContextGuidProperty 的 activity
欄位來加以參考。
如果您實作使用長期存放區的持續性服務,為了維持與工作流程執行階段引擎內部狀態的一致性,您應該參與工作流程異動批次處理,以延遲對您的長期存放區的實際寫入,直到工作流程認可點為止。 若要參與批次處理,請將代表暫停變更資料庫的工作項目加入至 WorkBatch 屬性中,然後在您的持續性服務中實作 IPendingWork 介面。
如果您無法將完成的範圍儲存至資料存放區中,則應該擲回有適當錯誤訊息的 PersistenceException。