次の方法で共有


カスタム WorkflowCommitWorkBatchService サービスの作成

ワークフローの実行結果をコミットする必要が生じると、ワークフロー ランタイムは WorkflowCommitWorkBatchService サービスを使用します。カスタム WorkflowCommitWorkBatchService サービスを提供すれば、たとえばトランザクション コンテキストを提供することにより、コミット ロジックの実行方法を制御できます。WorkflowCommitWorkBatchService を指定しない場合、ワークフロー ランタイムは開始時に DefaultWorkflowCommitWorkBatchService を作成します。

カスタム WorkflowCommitWorkBatchService サービスを作成するには、WorkflowCommitWorkBatchService 基本クラスから派生する必要があります。このクラスは、オーバーライド可能な仮想メソッドを 1 つ定義しています。

protected void CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback)

コミットすべき作業バッチが存在する場合 (たとえばワークフロー インスタンスの変更内容を永続化するとき) には、ワークフロー ランタイムによってこのメソッドが呼び出されます。このメソッドの実装は、適切なトランザクション スコープ内で CommitWorkBatchCallback メソッドを呼び出す必要があります。

アンビエント トランザクション

基本実装は、ワークフロー インスタンスによって開始されたアンビエント トランザクションが存在するかどうかを検査します。検出されない場合には、アンビエント トランザクションを作成して CommitWorkBatch デリゲートを呼び出します。一方、アンビエント トランザクションが存在する場合には、基本実装は DependentCloneOption 列挙から BlockCommitUntilComplete を指定して DependentTransaction を作成した後、アンビエント トランザクションを新しい DependentTransaction に等しく設定します。こうすれば、ワークフロー インスタンスによって生成されるアンビエント トランザクションは、作業バッチのコミットが完了するまでは終了しません。例外が発生した場合、CommitWorkBatch サービスはトランザクションをロールバックして例外を再スローします。この例外をキャッチするために FaultHandlerActivity を使用できます。こうすれば、必要に応じてトランザクションを再試行できます。

WorkflowCommitWorkBatchService によってサポートされる唯一のアンビエント トランザクションは、ワークフロー インスタンスによって開始されたトランザクションだけです。ホスト アプリケーション、またはワークフロー ランタイムを実行しているアプリケーションによって開始されたアンビエント トランザクションは、マイナスの影響を減らすために現在のスレッドから一時的に削除されます。ワークフローがアイドル状態になった後、ホストに含まれていた元のアンビエント トランザクションはスレッド内に戻されます。したがって、Windows Workflow Foundation は、トランザクションを外部からワークフロー インスタンス内に入れる機能をサポートしません。

関連項目

参照

DefaultWorkflowCommitWorkBatchService
WorkflowCommitWorkBatchService

概念

Windows ワークフロー CommitWorkBatch サービス

その他の技術情報

Windows Workflow Foundation Service の開発

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.