Windows Workflow の基本概念

このトピックの内容は、Windows Workflow Foundation 4 に該当します。

.NET Framework Version 4 のワークフロー開発で使用される概念は、一部の開発者にとっては不慣れなものかもしれません。ここでは、そのいくつかの概念について、内容と実装方法を説明します。

ワークフローとアクティビティ

ワークフローは、プロセスをモデル化するアクションの構造化されたコレクションです。ワークフローの各アクションは、アクティビティとしてモデル化されます。ホストがワークフローとのやり取りを行う場合、メソッドと同じようにワークフローを呼び出すときは WorkflowInvoker が使用され、1 つのワークフロー インスタンスの実行を明示的に制御するときは WorkflowInstance が使用されるほか、インスタンスが複数のシナリオでメッセージ ベースのやり取りを行うときは WorkflowServiceHost が使用されます。ワークフローの手順はアクティビティの階層として定義されるため、階層の最上位のアクティビティはワークフローそのものを定義すると言えます。この階層モデルは、前のバージョンの明示的な SequentialWorkflow クラスおよび StateMachineWorkflow クラスの代わりになります。アクティビティ自体は、他のアクティビティの集まりとして開発されたり (ベースとして Activity クラスを使用。通常は XAML を使用して定義されます)、データ アクセスにランタイムを使用できる CodeActivity や、ワークフロー ランタイムの範囲をアクティビティの作成者に提示する NativeActivity クラスを使用して作成されるカスタムとして開発されたりします。CodeActivity クラスおよび NativeActivity クラスを使用して開発されるアクティビティは、C# などの CLR 準拠の言語を使用して作成されます。

アクティビティ データ モデル

アクティビティは、次の表に示すタイプを使用してデータを格納および共有します。

変数

データをアクティビティに格納します。

引数

データをアクティビティに移動したり、アクティビティから移動したりします。

引数のバインディングで使用される、昇格された戻り値を持つアクティビティです。

ワークフロー ランタイム

ワークフロー ランタイムは、ワークフローが実行される環境です。WorkflowInvoker を使用すると、ワークフローを最も簡単に実行できます。ホストは、次の処理に WorkflowInvoker を使用します。

  • ワークフローの同期呼び出しを実行する。

  • ワークフローに入力を行ったり、ワークフローから出力を取り出したりする。

  • アクティビティによって使用される拡張機能を追加する。

ActivityInstance は、ホストがランタイムとのやり取りに使用できるスレッドセーフなプロキシです。ホストは、次の処理に ActivityInstance を使用します。

  • インスタンスを作成するか、インスタンス ストアから読み込んで、インスタンスを取得する。

  • インスタンスのライフサイクル イベントが通知されるようにする。

  • ワークフローの実行を制御する。

  • ワークフローに入力を行ったり、ワークフローから出力を取り出したりする。

  • ワークフローの継続を通知し、値をワークフローに渡す。

  • ワークフローのデータを永続化する。

  • アクティビティによって使用される拡張機能を追加する。

ワークフローの要素は、ActivityExecutionContext クラスを使用してワークフローのランタイム環境にアクセスします。これらの要素がこのクラスを使用する目的は、引数や変数の解決や子アクティビティのスケジュール設定など、多岐にわたります。

サービス

ワークフローは、メッセージング アクティビティを使用して Windows Communication Foundation (WCF) サービスの実装およびアクセスを行う、無理のない方法です。ワークフロー サービスは WorkflowServiceHost でホストされます。

永続性、アンロード、実行時間の長いワークフロー

Windows Workflow は次の機能により、実行時間の長いリアクティブなプログラムの作成を簡素化しています。

  • 外部入力にアクセスするアクティビティ

  • ホストのリスナーが再開できる Bookmark オブジェクトを作成する機能

  • ワークフローのデータを永続化してワークフローをアンロードした後、特定のワークフローでの Bookmark オブジェクトの再開に反応してワークフローを再読み込みおよび再アクティブ化する機能

ワークフローは、実行するアクティビティがなくなるか、現在の実行中のすべてのアクティビティが入力を待機するまで、アクティビティを継続して実行します。後者の場合、ワークフローはアイドル状態になります。ホストでは、アイドル状態になったワークフローをアンロードし、実行を継続するためのメッセージが到着したときにワークフローを再読み込みすることは一般的です。WorkflowServiceHost によって、この機能が実現されるほか、拡張可能なアンロード ポリシーを使用できます。永続化できない揮発性の状態またはデータを使用する実行ブロックの場合、アクティビティは ActivityExecutionContext を使用して、永続化すべきではないホストを指定することができます。また、ワークフローは Persist アクティビティを使用して、そのデータを永続ストレージ メディアに永続化することもできます。