n階層システム設計の考慮点

第6回 WCFとWFを統合したアプリケーションの設計について

この記事を読むのに必要な時間:およそ 4.5 分

.NET Framework 3.0以降では,WF(Microsoft Windows Workflow Foundation)とWCF(Windows Communication Foundation)を使用してアプリケーション構築ができるようになりました。これにより,ビジネスレイヤで定義されたビジネスエンティティをインターフェイスとして,WCF経由でさまざまなアプリケーションと接続するシステムを容易に構築できるようになりました。

WFを使用することで,ビジネスレイヤ内のビジネスコンポーネントの流れの制御や外部アプリケーションとの連携,状態遷移を用いたロングトランザクションの制御も比較的容易にできるようになりました。そして,WFとWCFを連携することにより,より効率的にビジネスレイヤをサービスとして公開することができるようになりました。WFからWCFを含んだカスタムアクティビティを呼び出すことによって,さまざまな分散システム技術で公開されたサービスと連携できるようにもなりました。

そこで,今回はWCFとWFを統合したアプリケーションの設計の注意点とノウハウについて説明したいと思います。

その前にここで,WFとWCFの機能についておさらいをしたいと思います。

① WFの機能

WFは,Windowsプラットフォームでワークフローソリューションを開発するための拡張フレームワークです。WFは,ワークフローベースのアプリケーションの開発および実行のためのAPIおよびツールを提供します。

ワークフローでは宣言式の長時間実行プロセスとしてプログラムを表現することができます。WFは,シーケンシャルワークフローとステートマシンワークフローを含む,さまざまなカテゴリのアプリケーションの構築環境が提供されています。

WFは,ワークフローエンジン,.NETで管理されたAPI,ランタイムサービスが提供されており,開発環境としてMicrosoft Visual Studio 2005およびMicrosoft Visual Studio 2008と統合された視覚的なデザイナとデバッガが提供されています。

図1 Visual Studio 2005に統合されたビジュアルデザイナー

図1 Visual Studio 2005に統合されたビジュアルデザイナー

WFでは,クライアントおよびサーバの両方に及ぶワークフローの構築および実行が可能であり,すべてのタイプの .NETアプリケーション内で実行可能なワークフローを作成できます。

WFで使用される用語はおもに2つです。

ワークフロー

ワークフローは,アクティビティのマップとして定義されたヒューマンプロセスまたはシステムプロセスのモデルです。

ワークフローベースのプログラムは,宣言XAMLExtensible Application Markup Language文書内に指定されます。これは,ドメイン固有アクティビティの見地からプログラムの構造を指定する文書です。

アクティビティ

アクティビティは,ワークフローのステップであり,ワークフローの実行,再利用,および構成の単位です。

アクティビティのマップは,ルール,アクション,状態,およびそれらの関係を表します。アクティビティを配置してデザインされたWFのワークフローは,.NETアセンブリにコンパイルされ,ワークフローランタイムおよび共通言語ランタイム(移行CLRと略します)で実行されます。

アクティビティは,C#あるいはVisual Basicなどの従来のCLRベースのプログラミング言語で実装されます。

WFベースのアプリケーションは,相互に接続されたコンポーネントによって構成され,これらのコンポーネントは Microsoft .NETコードによってバックアップされ,ホストアプリケーションで実行されます。

また,管理サービスを活かすことで,ワークフローの状態のイベント化,追跡,あるいはクエリを介して,個々のワークフロー プログラムの状態を検査することもできます。

② WCFの機能

WCFでは,ネットワーク分散サービスを構築,構成,および展開することができます。

WCFは主にWCFランタイムと,ASP.NET Web Services(ASMX),Web Service Enhancements(WSE)拡張,Microsoft メッセージキュー(MSMQ),Enterprise Services/COM+ランタイム環境,および .NET Remotingなどの分散システム技術をサポートしているライブラリで構成されています。

WCFは設計時にこれらのさまざまな分散システム技術を選択する必要性をなくし,1つのテクノロジプラットフォームに関する要件を組み合わせて実装できるようなります。これにより,プログラマーはそれぞれの分散システム技術間で接続に必要となるトランスポート,プロキシメカニズム,および通信チャネルの動作方法等といった個別の技術について習得する必要がなくなります。ただし,プログラマーはこれらの技術ついて勉強し,理解しておくことが望ましいでしょう。

図2 WCFの基本概念

図2 WCFの基本概念
(出典:Microsoft社 MSDNライブラリ)

WCFで使用される用語は主に3つです。そしてそれらはWCFサービスの記述(および構成)に必ず使用される3段階のプロセスとなります。

アドレス(Address)

コントラクトのエンドポイントを,ネットワークアドレスに紐付けて(バインディング定義を使用,すなわち名前によって)展開します。

バインディング(Binding)

トランスポートに加え,サービス品質,セキュリティ,およびその他のオプションを指定するサービスのバインディングを選択または定義します。

コントラクト(Contract)

コントラクトを定義してサービス上で実装します。

ここで,コントラクトにはサービスコントラクトとデータコントラクトがあります。

サービスコントラクトはインターフェイスの形態とルール,および関連するメッセージと操作を定義します。データコントラクトは操作の入出力メッセージを介して交換されるデータの形態とルールを定義します

これらの 3つの要素が独立していることはとても重要です。

これらがそれぞれ独立していることにより,コントラクトは多数のバインディングをサポートでき,バインディングは多数のコントラクトをサポートできます。

サービスは,多数のコントラクトのエンドポイントを共存させ,同時に有効化することができます。

これにより,たとえばHTTP 経由でSOAP 1.1を使用したWebサービスを公開し,さらにTCP経由で通信されるサービスを公開するといったことを同じサービス上に共存させることができます。

著者プロフィール

露木敏博(つゆきとしひろ)

1966年神奈川県横浜市生まれ。1990年,株式会社日立システムアンドサービス(旧日立システムエンジニアリング株式会社)に入社。

流通系SE,営業所駐在SEなどを経て,2003年から生産技術部門で.NET技術に関する技術支援業務に携り,.NET技術に関する各種基準書および標準化,設計ガイドなどを作成。

マイクロソフトMVPアワードプログラムよりDevelopment Platforms - ASP/ASP.NETのカテゴリで2008年7月よりMVPアワードを受賞。

コメント

コメントの記入