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 メソッドの 1 つを呼び出して、activityStream にシリアル化する必要があります。その後、Stream を追加処理してからデータ ストアに書き込むこともできます。 ただし、ワークフロー ランタイム エンジンが LoadCompletedContextActivity を呼び出したときは、アクティビティの完全なコピーを復元する必要があります。

完了したスコープを、それが囲まれるワークフロー インスタンスに関連付け、ワークフロー インスタンスが完了または終了したときに、データ ストア内のそのスコープを不要とマークすることが可能である必要があります。 したがって、完了したスコープに関連付けられたワークフロー インスタンスの Guid も保存する必要があります。これは、InstanceId に関連付けられた WorkflowInstanceactivity プロパティから取得できます。

LoadCompletedContextActivity は、完了したスコープの Guid をパラメーターとして受け取ります。 したがって、ContextGuid に関連付けられた activity プロパティも保存する必要があります。 このプロパティは、ActivityContextGuidPropertyactivity フィールドを通じて参照できます。

永続的ストアを使用する永続性サービスを実装する場合は、ワークフロー ランタイム エンジンの内部状態との整合性を維持するために、ワークフロー トランザクション バッチに参加する必要があります。こうすることで、永続的ストアへの実際の書き込みをワークフロー コミット ポイントに達するまで遅らせます。 バッチに参加するには、データベースに対する保留中の変更を表す WorkBatch プロパティに作業項目を追加し、永続性サービスに IPendingWork インターフェイスを実装します。

完了したスコープをデータ ストアに保存できなかった場合は、適切なエラー メッセージを含めた PersistenceException をスローする必要があります。

適用対象