次の方法で共有


ワークフロー内状態情報のバッチ化

ワークフローは、永続性ポイントと呼ばれるさまざまなチェックポイントでの状態を永続ストレージに定期的に保存します。ワークフロー内で問題が発生した場合、安定した状態に戻るために、この永続化された情報をランタイム エンジンによって取得する必要が生じることがあります。2 つ以上のコンポーネントが通信中の場合は、それらのコンポーネントの状態が一致するように永続化を連携させると、役立つ場合が多くあります。状態情報を永続化するために、ワークフロー外部のサービスから作業バッチが使用されます。これらのサービスでは、作業項目をバッチ処理し、ワークフローのトランザクションと同じトランザクションを共有します。ワークフローがトランザクションをコミットしていなければ、永続性ポイント中にサービスによってバッチ処理できる作業項目もあります。

Windows Workflow Foundation には、サービスとワークフロー インスタンスで状態情報を永続化するのに役立つ IWorkBatchIPendingWork が用意されています。

ワークフローから行われるサービスのすべての呼び出しでは、ランタイム エンジンからそのスレッド呼び出しコンテキストに IWorkBatch が提供されます。サービスでは、ランタイム エンジンがすべての関連作業項目を 1 つのトランザクションでコミットできるように、この作業バッチに保留中の作業項目を追加することができます。作業バッチへの作業項目の追加または登録を行うには、次のステートメントを使用します。

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

また、IPendingWorkExternalDataEventArgs のコンストラクタに渡すことができます。

コンポーネントを呼び出すときのアクションのシーケンス

  1. 初期化中に、ワークフローが作業バッチを作成します。

  2. ワークフローは、この作業バッチをコンポーネントのメソッドの呼び出しに結合します。サービスでは WorkflowEnvironment クラスを使用して、サービスのいずれかのメソッドの作業バッチにアクセスできます。

コミット ポイントでのアクションのシーケンス

  1. ワークフローがトランザクションを作成します。

  2. ワークフローは、作業バッチを反復処理して、コンポーネントに対するすべての作業項目を順序を維持しながら収集し、作業バッチを作成します。ワークフローは、コンポーネントに対して Commit メソッドを呼び出し、トランザクションと作業バッチを渡します。

  3. コンポーネントは、作業バッチ内の作業をトランザクションに追加します。

  4. 作業バッチ内に作業項目があるすべてのコンポーネントについて、手順 2. と 3. を繰り返します。

  5. Commit 通知が成功すると、ワークフローは対応するトランザクションをコミットします。

  6. トランザクションが正常にコミットされると、ワークフローは作業バッチを反復処理し、手順 2. のようにすべての作業項目をコンポーネントごとに収集します。ワークフローは各コンポーネントに対して Complete メソッドを呼び出し、対応するトランザクションと作業バッチを渡します。

ワークフロー エラー時のアクションのシーケンス

  1. ワークフローは、エラー範囲に関連するすべての作業項目を特定し、作業バッチを構築します。

  2. ワークフローは、作業バッチ内のすべての作業について完了ステータスが false である、一意の各 IPendingWorkComplete メソッドを呼び出します。

  3. 作業バッチが TransactionScopeActivity アクティビティ、または CompensatingTransactionScopeActivity アクティビティの子コンテキストに属している場合、ワークフローは作業バッチ内のすべての作業を破棄します。

  4. ランタイムは、エラーからの回復後も、残っているすべての作業バッチ項目への参照を保持します。その作業は、将来の永続性ポイントでコミットされます。

作業バッチ トランザクションの再試行

DefaultWorkflowCommitWorkBatchServiceSharedConnectionWorkflowCommitWorkBatchServiceSqlWorkflowPersistenceService および SqlTrackingService は、いずれも作業バッチのコミットを再試行できます。EnableRetries プロパティを有効にした場合、これらのサービスでは、ネットワーク タイムアウト、マシンの再起動、SQL Server のプロセス リセットなどが起きたときに、作業バッチの再試行を続けることができます。

再試行の回数は 20 に設定されています。最初は 3 回続けて再試行されます。4 回目以降は、間隔を空けて再試行されます。アプリケーションで接続文字列の接続タイムアウトを調整して、再試行の間隔を一部調整できます。

このプロパティは、プログラムで設定することも、構成ファイルを使用して設定することもできます。プログラムによる設定方法の詳細については、各サービスの EnableRetries プロパティを参照してください。構成ファイルによる設定方法の詳細については、「Workflow Configuration Files」を参照してください。

関連項目

概念

ワークフローとアプリケーション通信

その他の技術情報

Using Transaction Services Sample
ワークフローの開発

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.