Share via


カスタム永続性サービスの作成

永続性サービスを実装すれば、ワークフロー インスタンスの実行時の状態を永続ストアに保存して、そのストアから状態を取得することができます。ワークフロー実行中の特定のコミット ポイントで、Windows Workflow Foundation ランタイム エンジンはワークフローの状態情報を永続化するよう永続性サービスに通知します。これが行われるのは、たとえば、ワークフローがアイドル状態になったとき、TransactionScopeActivity アクティビティの実行が完了したとき、またはホスト アプリケーションが Unload メソッドを呼び出したときです。

Windows Workflow Foundation ランタイム エンジン自体は、状態情報を永続化しません。このような機能は、実行時にエンジンに追加されるカスタム永続性サービスによって提供されます。ランタイム エンジンは永続化の操作を開始し、カスタム永続性サービスは永続化された状態の日付の保存と読み込みを行います。

Caution note注意 :

TransactionScopeActivity アクティビティ、CompensatableTransactionScopeActivity アクティビティ、CompensatableSequenceActivity アクティビティ、あるいは PersistOnCloseAttribute 属性を使用するか ICompensatableActivity インターフェイスを実装するカスタム アクティビティを使用するワークフローの作成時には、使用する永続性サービスを指定する必要があります。そうしない場合、ワークフロー実行時に例外がスローされます。

カスタム永続性サービスの作成

カスタム永続性サービスを作成するには、WorkflowPersistenceService 抽象基本クラスから派生させます。独自の永続性サービスを作成するときには、この基本クラスに含まれる 5 つの抽象メソッドをオーバーライドする必要があります。次の表は、これらのメソッドを示しています。

メソッド 説明

LoadCompletedContextActivity

指定した完了スコープをメモリの中に戻します。

LoadWorkflowInstanceState

指定したワークフロー インスタンス状態をメモリの中に戻します。

SaveCompletedContextActivity

指定した完了スコープをデータ ストアに保存します。

SaveWorkflowInstanceState

ワークフロー インスタンス状態をデータ ストアに保存します。

UnlockWorkflowInstanceState

指定したワークフロー インスタンス状態のロックを解除します。

UnloadOnIdle

指定したワークフロー インスタンスが一定期間にわたってアイドル状態になった場合に、そのワークフロー インスタンスをストレージに永続化するかどうかを決定します。

カスタム永続性サービスを介してワークフロー インスタンス状態を保存することによって Windows Workflow Foundation エンジンがワークフローをアンロードする方法については、「Custom Persistence Service」のサンプルを参照してください。

ワークフロー状態情報のロック

複数のプロセスで実行される別個の永続性サービスによって 1 つのワークフローが読み込まれることを防ぐために、Windows Workflow Foundation ランタイム エンジンはワークフローの状態情報をロックすることができます。ただし、実際のロック メカニズムはカスタム永続性サービス自体によって実装されます。つまり、独自の永続性サービスを作成するときにこれをサポートするかどうかは任意選択です。ワークフロー状態のロックをサポートする場合には、SaveWorkflowInstanceState 呼び出し時と LoadWorkflowInstanceState 呼び出し時にアンロック パラメータが false に設定されるときに、ワークフロー状態へのアクセスをロックする必要があります。ワークフロー状態情報は、後続の SaveWorkflowInstanceState 呼び出しでアンロック パラメータが true に設定されるか、UnlockWorkflowInstanceState メソッドが呼び出されるときまで、ロックされる必要があります。あるプロセスが、ロックされているワークフロー インスタンス状態を読み込もうと試みた場合は、WorkflowOwnershipException をスローする必要があります。

トランザクションを使用したワークフロー状態情報の永続化

カスタム永続性サービスが永続ストアを使用する場合には、ワークフロー コミット ポイントに到達するまでワークフロー状態情報の書き込みを遅らせるために、ワークフロー トランザクション バッチ処理を使用する必要があります。これを行うには、カスタム永続性サービス クラス内に IPendingWork インターフェイスを実装して、永続ストアの変更保留を表す作業アイテムを WorkBatch プロパティに追加します。

関連項目

参照

WorkflowPersistenceService

概念

永続化の概要
Windows ワークフロー永続性サービス

その他の技術情報

Custom Persistence Service
Using Persistence Services
Windows Workflow Foundation Service の開発

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.