ホーム > .NET Framework 3.5 SP1 > Windows Workflow Foundation

Windows Workflow Foundation

Windows Workflow Foundation (WF) は、ワークフロー対応のアプリケーションを構築するためにマイクロソフトが提供するテクノロジ プラットフォームです。このプラットフォームには、ワークフローを設計および実装するための一連のツール、ワークフローを制御し、ワークフローと通信するプログラミング モデル、ルール エンジン、ワークフロー実行エンジン、および永続化、追跡、トランザクション管理などを行うのための一連のワークフロー ランタイム サービスが含まれています。このドキュメントでは WF による全体的な価値提案を、その主なメリット、アプリケーション シナリオ、コア機能に重点を置いてまとめています。

WF のリリースとプラットフォーム サポート

.NET Framework 3.0 は 2006 年 11 月にリリースされましたが、公式発表は 2007 年 1 月に Windows Vista と同時に行われました。WF はこのときに、Windows Communication Foundation (WCF) および Windows Presentation Foundation (WPF) とともに導入されました。この時点で、任意の Windows アプリケーションの一部としてホストできる、スタンドアロン ワークフロー テクノロジ プラットフォームをマイクロソフトがリリースしたことになります。このプラットフォームは、ワークフロー デザイナー、ワークフロー アクティビティのライブラリ、.NET アプリケーションでワークフローをホストするプログラミング モデル、ルール エンジン、およびワークフロー実行エンジンから構成されています。コア機能には、状態管理の組み込みサポート、ワークフロー追跡、トランザクションの補正、例外処理、ワークフローの動的更新などがあります。

2007 年 11 月、Visual Studio 2008 と同時に .NET Framework 3.5 がリリースされました。このリリースで、WCF サービスとの統合強化を主な目的として、以下のような追加機能が WF に導入されました。

  • 開発者が以下の作業を容易に行えるようにする新しいツールと機能
    • ワークフローを WCF サービスとして公開する
    • WCF サービスの操作を使ってワークフローへのメッセージを受信する
    • ワークフローから WCF サービスにメッセージを送信する
    • ワークフローの状態管理を利用して、実行時間の長いプロセスを実現できる、持続性のある WCF サービスを作成する
  • エンタープライズ Web サービス プロトコル (SOAP や WS*) や、Plain Old XML (POX)、Representational State Transfer (REST) といった Web プログラミング モデルを使用する WCF サービスのサポート
  • Visual Studio 2008 に統合される生産性向上ツールとワークフロー関連のテンプレート
  • 事前バインド、演算子のオーバーロード、および拡張メソッドをサポートするように強化されたルール エンジンの開発機能

ワークフロー対応のアプリケーションを配置できるプラットフォームは、Windows XP (SP2 以上)、Windows Vista、Windows Server 2003、および Windows Server 2008 です。

ワークフローの意義

ワークフロー テクノロジはビジネス プロセスを自動化できるようにします。プロセスを自動化することで、ビジネスの各プロセス内で連携する論理アクティビティの全体的な正確性、効率、予測可能性が向上します。ワークフローによって、システムの通信が自動化され人間が介入する必要性がなくなる場合もあれば、人間とシステム アクティビティとの間で対話が必要不可欠な場合にその対話の効率が高まる場合もあります。いずれの場合でも、ワークフローは複雑なプロセスの可視性を高め、ビジネス ユーザーとテクノロジの間の円滑な通信を促進します。

WF は Windows アプリケーションに対して、以下のようなビジネス プロセスの自動化が容易になるように設計された開発ツールです。

  • WF は、シーケンシャル ワークフローまたはステート マシン ワークフローをサポートします。シーケンシャル ワークフローは、通常、しっかりと定義された処理順序と明確なビジネス ルールを備えたアクティビティと、アクティビティ間のフローを制御する意思決定ロジックを連携させます。シーケンシャル ワークフローでは、完全に自動化されたプロセスを含めることも、ユーザーや外部システムのイベントによる外部入力を待機することもできます。ステート マシン ワークフローでは、別の処理や別の状態への遷移をトリガーする外部イベントに、ワークフローから応答することができます。
  • 開発者は、使い慣れた Visual Studio 環境に統合されたワークフロー デザイナーを使用して、アクティビティを編成し、ビジネス要件を満たすワークフローを定義することができます。ビジネス ユーザーは、その実装が目に見える形で作成されたワークフローを確認し、実際のビジネス要件を満たしているかどうかを検証することができます。
  • ワークフローによって、複雑なビジネス ルールがアプリケーション コードから切り離されるため、ルールの作成、変更、保守が容易になります。WF デザイナーは、ビジネス ルールを他のワークフロー ロジックから切り離して定義する手段を提供します。
  • ワークフローでは、通信、エラー処理、アクティビティの補正といったプロセスの流れに影響する可能性がある意思決定ロジックやビジネス ルールなど、複雑なビジネス プロセスの細かい部分をカプセル化することができます。
  • 開発者は、ビジネス領域に共通するワークフロー ロジックをカスタム アクティビティに容易にカプセル化することができます。こうしたカスタム アクティビティはワークフロー内で再利用でき、論理的に関連するアクティビティの特定のサブセットの複雑な部分を覆い隠すことができます。大まかには、あるビジネス領域固有のアクティビティが、ビジネス アナリストがワークフロー定義を設計する際のビルド ブロックになることもあります。
  • 実行時間の長いワークフローの状態は、WF が提供する永続化と追跡のための組み込みサービスによって管理およびトレースすることが可能です。
  • さまざまなアプリケーションやユーザーが、さまざな実行段階で特定のワークフロー インスタンスと対話できるように、ヒューマン ワークフローを組み込むことができます。

ワークフロー、SharePoint および BizTalk

ワークフロー エンジンは、ワークフロー製品固有のランタイムをホストする環境の一部として、サーバーに配置されるのが通例です。しかし、これは多くの管理ツールを含みシステムの複雑化につながることから、配置オプションの点からは柔軟性に乏しい手法です。また、関連するライセンス料も高額になりがちです。WF の実行ランタイムは無償で、任意の Windows アプリケーションに含める形でホストできます。つまり、開発者は、Windows フォームや WPF クライアント実行可能プログラム、インターネット インフォメーション サービス (IIS) でホストされる ASP.NET Web アプリケーション、IIS または Windows プロセス アクティブ化サービス (WAS) でホストされる WCF サービス アプリケーション、Windows サービスでホストされるアプリケーションなどをワークフロー対応にすることができます。これらの各アプリケーション シナリオでは、開発者が使い慣れた開発ツール、プログラミング言語、さらに共通のワークフロー実行モデルを使用して、開発エクスペリエンスの一貫性を確保できます。このような柔軟性を備えた WF を使用することで、実行時間の長いビジネス プロセスや詳細なビジネス プロセスを目に見える形にする、ビジネス ルールをコードから切り離す、Windows アプリケーションや Web アプリケーション向けにユーザー インターフェイスのフローを連携させるといった、広範な問題を解決することができます。

また、Windows SharePoint Server (WSS) 3.0 および Office SharePoint Server (MOSS) 2007 も WF ランタイムをホストします。WSS 3.0 は Windows Server 2003 または Windows Server 2008 に展開される SharePoint アプリケーション用の無償ランタイムです。MOSS 2007 は追加機能を備えたライセンス製品です。SharePoint には、コラボレーションやコンテンツ管理のために複数の WF テンプレートが含まれていますが、SharePoint Designer 2007 を使えば、技術系以外のユーザーでも既存の WF テンプレートをカスタマイズしたり、SharePoint アプリケーションおよび関連コンテンツと連携する新しいワークフローを作成したりすることができます。SharePoint Server 2007 のテンプレートを利用して、Visual Studio 2008 から SharePoint アプリケーション向けのワークフローを新規作成することもできます。

BizTalk Server のオーケストレーション エンジンと WF ランタイムには多くの類似点があります。しかし、BizTalk Server は、さまざまな形式のアプリケーション間でメッセージをマッピングするための変換エンジンを含め、エンタープライズ規模での統合の問題を解決することを目的としています。BizTalk Server によって提供される豊富な一連のアダプターによって異種システムやレガシ システムと通信できます。オーケストレーションを記述する際の相互運用可能な標準として、Business Process Execution Language (BPEL) もサポートされます。BPEL を使ってオーケストレーションを定義し、任意のプラットフォーム上のワークフロー エンジンやオーケストレーション エンジン間で共有することができます。また、ビジネス アナリストがオーケストレーション、ビジネス ルール、および関連統計を操作するツールも追加されています。最新リリースの BizTalk Server 2006 (R2) は WF テクノロジを基盤とはしていません。しかし、次期リリースの BizTalk Server プラットフォームでは、オーケストレーション エンジンの中核に WF テクノロジが使用される予定で、再び開発者にとって一貫性のあるエクスペリエンスが実現されます。

永続化サービスと追跡サービス

ワークフローは、人間が介在したり、なんらかのシステム イベントを待機したりする間に、アクティビティとアクティビティの間に遅延が必要になることがあり、実行時間が非常に長くなる可能性があります。そのため、ワークフローの実行においては、さまざまな時点の状態を保存するための状態管理が必要不可欠です。状態を管理することで、ワークフローの状況を見失うことなく、コンピューターの再起動時やエラー発生時にも状態が失われることがなくなります。また、使用中ではないシステム リソースを節約することもできます。WF にはこのような要件に対処する、以下のような状態管理機能があります。

  • WF には、アイドル時にワークフロー状態を保存し、その後ワークフロー インスタンスが再びアクティブになるときに元の状態に復元できる永続化サービスが組み込まれています。このサービスはプロバイダー モデルに依存するため、データベースの選択が柔軟になります。
  • 永続化することで、ワークフロー インスタンスに関連するリソースを解放し、システム全体のスケーラビリティやパフォーマンスを最適化することができます。
  • ワークフローの実行を再開するときには、ワークフローの状態が中央のデータベースから初期化されるため、再開前と同じコンピューターでワークフローを実行する必要はありません。これにより、サーバー側のワークフローのスケーラビリティが向上し、ワークフローをサーバー ファームに分散することもできます。

実行中のワークフローを監視し、現時点で実行されている段階についての情報を収集することは、診断目的として有益なことです。WF にはワークフロー インスタンスのアクティビティやビジネス ルールが実行されたときに自動的にトレースを行う追跡サービスが含まれています。

生産性

WF には、以下に示すように、ワークフロー対応アプリケーションをビルドする際の開発者の生産性を高める要素が数多くあります。

  • Visual Studio 2008 には、ワークフロー対応アプリケーションやサービスを生成したり、プロジェクトに新しい SharePoint Server 2007 ワークフローやカスタマム ワークフローを生成したりするための一連のテンプレートがあります。
  • Visual Studio 2008 には、ワークフローを目に見える形で作成し、それを保守するために、ツールボックスを使って組み込みのアクティビティやカスタム アクティビティにアクセスできるワークフロー デザイナーがあります。
  • 新しい送信アクティビティと受信アクティビティは、WCF サービスとの通信を容易にします。
  • 状態管理、アクティビティの追跡、トランザクション管理、およびスレッド モデルを処理するために不可欠なプラミングが組み込まれています。
  • 開発者は、独自のワークフロー ツールや構文を習得する必要がなく、使い慣れた開発環境とプログラミング言語で作業することができます。アクティビティを使用する開発手法とアクティビティを制御する手法に一貫性が保たれています。開発者はアクティビティをワークフローのデザイン サーフェイスにドラッグ アンド ドロップし、アクティビティのプロパティを設定して、関連するイベントを処理し、アクティビティやシステムの他の部分と対話するコードを記述します。

アプリケーション シナリオ

任意の Windows アプリケーションで WF をホストできるため、さまざまなシナリオを満たすために WF を使用できます。ここでは、WF の典型的な実装例をいくつか紹介し、その実装を支えるコア機能について説明します。

SharePoint Server 2007 とワークフロー

SharePoint Server 2007 は WF とシームレスに統合されているため、SharePoint Server 2007 はワークフローの配置に適したプラットフォームです。SharePoint アプリケーションは基本的に相互運用性が高く、通常、さまざまなフォームやコンテンツとの対話に関与します。SharePoint アプリケーションは、フィードバックの収集、ドキュメントのルーティング、調査と承認、タスク関連の問題点の追跡といった多数の組み込みワークフローにアクセスできます。これらのワークフローをカスタマイズして、SharePoint コンテンツと対話するカスタム ワークフローを記述できます。そのため、WF には次のようなメリットがあります。

  • 技術系以外のユーザーでも WF ベースのさまざまな組み込み SharePoint ワークフローからワークフローを選択できます。
  • 技術系以外のユーザーでも、SharePoint Designer や SharePoint 特有のアクティビティを使って組み込みの SharePoint ワークフローを変更し、特定のニーズを満たすことができます。その際、コーディング作業は一切必要ありません。
  • 開発者は、使い慣れた Visual Studio 環境で独自の SharePoint ワークフローをビルドし、任意の SharePoint アプリケーション用にインストールして使用することができます。このプロセスは SharePoint ワークフローのテンプレートで簡素化されます。

SharePoint Server が WF の実行エンジンをホストするため、SharePoint アプリケーション内でワークフローをサポートするのに開発者が介入する必要がありません。開発者は Windows のカスタム アプリケーションを使ってホスティングのロジックを提供します。

ヒューマン ワークフロー

WF は、"ヒューマン ワークフロー" と呼ばれる、人間が関与するビジネス プロセスとの連携に特に有効です。ヒューマン ワークフローでは、ワークフローの実行を外部イベントが発生するまで一時停止する必要があります。このような外部イベントは、一般的にユーザー操作によってトリガーされ、ワークフローの実行を先に進めます。WF の以下の機能がヒューマン ワークフローに有効です。

  • シーケンシャル ワークフローでもステート マシン ワークフローでも、ワークフローの実行再開まで外部イベントを待機するアイドル時間に対応できます。外部イベントの発生源としては、クライアント アプリケーションを使った人的操作やシステム イベントが考えられます。
  • WF の永続化サービスによって、実行再開イベントを待つ間のリソースを節約し、ワークフロー インスタンスの状態を保存し、再開後の要求をサーバー ファーム内の任意のコンピューターで処理することができます。
  • 実行時間の長いワークフローの場合、複数のクライアントアプリケーションから人的操作が行われる可能性があります。たとえば、ビジネス プロセスに異なる役割を持つユーザーが異なるアプリケーションを使用する可能性があります。つまり、ワークフローの実行が特定の段階に達すると、こうしたユーザーがそれぞれワークフロー インスタンスを操作できるようになります。

ワークフローとサービス

アプリケーションとサービス間でメッセージを使ってビジネス プロセスが自動化されていることが一般的な中間層では、ワークフローが特に役に立ちます。以下にこうした状況で一般的なパターンを示します。

  • ワークフローでは、サービス指向のシステム内の複数のサービス呼び出しを連携して、ビジネス プロセスを完了することができます。開発者は WF を利用し、組み込みのワークフロー アクティビティを使って、ASP.NET Web サービスや WCF サービスを呼び出すワークフローを作成できます。これによって、再利用可能なビジネス ロジックを長い実行プロセスの一部に含める形でまとめることができます。
  • クライアント アプリケーションから利用されるサービスとしてワークフローを公開できます。Visual Studio 2008 には WCF サービスとして公開されるワークフローを作成するために、新しい WF テンプレートが含まれています。ワークフロー サービスへの呼び出しは、そのワークフロー インスタンスのワークフロー実行エンジンを自動的に利用します。
  • サービス操作が実行する必要があるビジネス プロセスを実装するために、サービスによってワークフローをカプセル化することができます。この場合、ワークフローはビジネス層の実装の詳細の一部になります。

プレゼンテーション フローの調整

モデル ビュー コントローラー (MVC) は、プレゼンテーション層、ビジネス ロジック、およびプレゼンテーション フローをそれぞれ分離するために一般的に使用されるパターンです。このパターンを開発者に徹底し、アプリケーションのプレゼンテーション層、ビジネス ロジック、およびプレゼンテーション フローを分離させることで、プレゼンテーション フローに関連するロジックを容易に調整および再利用できるようになります。MVC パターン内のコントローラーとしては、ステート マシン ワークフローが適切な選択肢です。

ユーザー インターフェイスのナビゲーションが、ウィザード パターンに従っている場合でも、あまりにも複雑な場合でも、頻繁に変更される場合でも、ワークフロー デザイナーを利用すれば、プレゼンテーション フローを目で見て、変更を加えることができます。任意の Windows アプリケーションで WF をホストできるため、Windows フォーム、WPF クライアント アプリケーション、または ASP.NET Web アプリケーションにもこのパターンを適用できます。

ワークフロー デザイナーのホスティング

開発者は Visual Studio に含まれるワークフロー デザイナーを使ってワークフローを作成します。このワークフロー デザイナーとワークフロー ルール エディターは Visual Studio 環境外でもホストできるため、開発者は特定のビジネス領域の問題を解決するアプリケーションを作成することができます。

開発者がワークフロー デザイナーをホストする場合のオプションを以下に示します。

  • Visual Studio 2008 シェルをカスタマイズし、ワークフローを目に見える形で設計するための Visual Studio 2008 シェルに似た環境を用意できます。この手法により、ある程度開発者中心のワークフロー設計環境が実現されます。
  • 任意の Windows アプリケーションでワークフロー デザイナーをホストし、ワークフローを目に見える形で設計および管理するための完全にカスタマイズされたエクスペリエンスを用意できます。この手法は、ビジネス ユーザーのニーズを満たすワークフロー設計環境を構築する場合に特に有効です。

このように用意したワークフロー設計環境では、ビジネス領域向けのカスタム アクティビティ、その領域に合致したデザイナー エクスペリエンス、ワークフローの視覚化や状態追跡のカスタマイズといった追加ツールや特殊な機能がユーザーに提供されます。いずれの場合でも、中核となるプログラミング モデルは、ワークフローのランタイム エクスペリエンスに対して一貫性が保たれます。

▲ Top of Page