Windows Workflow の基本概念

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

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

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

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

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

説明
変数 データをアクティビティに格納します。
引数 データをアクティビティに移動したり、アクティビティから移動したりします。
引数のバインディングで使用される、昇格された戻り値を持つアクティビティです。

ワークフロー ランタイム

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

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

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

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

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

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

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

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

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

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

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

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

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

サービス

ワークフローは、メッセージング アクティビティを使用して疎結合サービスの実装およびアクセスを行う、無理のない方法です。 メッセージング アクティビティは WCF 上にビルドされる、ワーク フローとのデータの受け渡しに使用される主要な方法です。 任意の種類のメッセージ交換パターンをモデル化するため、複数のメッセージング アクティビティを共に作成できます。 詳細については、「メッセージング アクティビティ」を参照してください。 ワークフロー サービスは WorkflowServiceHost クラスを使用してホストされます。 詳細については、「ワークフロー サービスのホストの概要」を参照してください。 ワークフロー サービスの詳細については、「ワークフロー サービス」を参照してください

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

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

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

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

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

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