.NET Framework 4.6.1 でのワークフロー開発では、一部の開発者には新しい概念が使用されています。 このトピックでは、いくつかの概念とその実装方法について説明します。
ワークフローとアクティビティ
ワークフローは、プロセスをモデル化するアクションの構造化されたコレクションです。 ワークフロー内の各アクションは、アクティビティとしてモデル化されます。 ホストは、ワークフローを呼び出すための WorkflowInvoker を使用してワークフローと対話します。メソッドであるかのように呼び出したり、1 つのワークフロー インスタンスの実行を明示的に制御 WorkflowApplication したり、マルチインスタンス シナリオでのメッセージ ベースの操作に WorkflowServiceHost したりします。 ワークフローのステップはアクティビティの階層として定義されているため、階層内の最上位のアクティビティはワークフロー自体を定義していると言えます。 この階層モデルは、以前のバージョンの明示的な SequentialWorkflow
クラスと StateMachineWorkflow
クラスの代わりに使用されます。 アクティビティ自体は、他のアクティビティのコレクションとして開発されます (通常は XAML を使用して定義される基本として Activity クラスを使用します)、またはデータ アクセスにランタイムを使用できる CodeActivity クラスを使用するか、 NativeActivity クラスを使用してカスタム作成されます。このクラスは、ワークフロー ランタイムの幅をアクティビティ作成者に公開します。 CodeActivityとNativeActivityを使用して開発されたアクティビティは、C# などの CLR 準拠言語を使用して作成されます。
アクティビティ データ モデル
アクティビティは、次の表に示す型を使用してデータを格納および共有します。
タイプ | 説明 |
---|---|
変数 | データをアクティビティに格納します。 |
引数 | アクティビティとの間でデータを移動します。 |
表現 | 引数バインドで使用される昇格された戻り値を持つアクティビティ。 |
ワークフロー ランタイム
ワークフロー ランタイムは、ワークフローを実行する環境です。 WorkflowInvoker は、ワークフローを実行する最も簡単な方法です。 ホストは、次の WorkflowInvoker を使用します。
ワークフローを同期的に呼び出す。
ワークフローへの入力を提供するか、ワークフローから出力を取得します。
アクティビティで使用する拡張機能を追加する。
ActivityInstance は、ホストがランタイムとの対話に使用できるスレッド セーフなプロキシです。 ホストは、次の ActivityInstance を使用します。
インスタンスを作成するか、インスタンス ストアから読み込んでインスタンスを取得する。
インスタンスのライフ サイクル イベントの通知を受け取ります。
ワークフローの実行を制御します。
ワークフローへの入力を提供するか、ワークフローから出力を取得します。
ワークフローの継続を通知し、ワークフローに値を渡す。
ワークフロー データを保持する。
アクティビティで使用する拡張機能を追加する。
アクティビティは、ActivityContextやNativeActivityContextなどの適切なCodeActivityContext派生クラスを使用して、ワークフロー ランタイム環境にアクセスできます。 これは、引数と変数の解決、子アクティビティのスケジュール設定、およびその他の多くの目的で使用されます。
サービス
ワークフローは、メッセージング アクティビティを使用して、疎結合されたサービスを実装してアクセスする自然な方法を提供します。 メッセージング アクティビティは WCF 上に構築されており、ワークフローとの間でデータを取得するために使用される主要なメカニズムです。 メッセージング アクティビティを一緒に作成して、任意の種類のメッセージ交換パターンをモデル化できます。 詳細については、「 メッセージング アクティビティ」を参照してください。 ワークフロー サービスは、 WorkflowServiceHost クラスを使用してホストされます。 詳細については、「 ホスティング ワークフロー サービスの概要」を参照してください。 ワークフロー サービスの詳細については、「ワークフロー サービス」を参照してください。
永続性、アンロード、実行時間の長いワークフロー
Windows ワークフローは、次の機能を提供することで、実行時間の長いリアクティブ プログラムの作成を簡略化します。
外部入力にアクセスするアクティビティ。
ホスト リスナーによって再開できる Bookmark オブジェクトを作成する機能。
ワークフローのデータを保持してワークフローをアンロードし、特定のワークフロー内の Bookmark オブジェクトの再開に応じてワークフローを再読み込みして再アクティブ化する機能。
ワークフローは、実行するアクティビティがなくなったり、現在実行中のすべてのアクティビティが入力を待機するまで、アクティビティを継続的に実行します。 後者の状態では、ワークフローは停止しています。 ホストでは、アイドル状態になったワークフローをアンロードし、メッセージが到着したときに実行を続行するために再度読み込むのが一般的です。 WorkflowServiceHost は、この機能の機能を提供し、拡張可能なアンロード ポリシーを提供します。 揮発性状態データまたは永続化できないその他のデータを使用する実行ブロックの場合、アクティビティは、 NoPersistHandleを使用して永続化しないことをホストに示すことができます。 また、ワークフローでは、 Persist アクティビティを使用して、そのデータを永続的なストレージ メディアに明示的に保持することもできます。
.NET