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

Windows Communication Foundation

Windows Communication Foundation (WCF) は、マイクロソフトが提供する SOA 向けのプラットフォームです。WCF は、セキュリティ、信頼性、スケーラビリティを備え、トランザクション処理を可能にする、エンタープライズと Web 用のサービス指向分散アプリケーションをビルドするために設計された機能豊富なテクノロジ基盤です。このドキュメントでは、WCF による全体的な価値提案を、その主なメリット、アプリケーション シナリオ、コア機能に重点を置いてまとめています。

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

.NET Framework  3.0 は 2006 年 11 月に製品版がリリースされましたが、公式発表は 2007 年 1 月に Windows Vista と同時に行われました。WCF はこのときに、Windows Workflow Foundation (WF) および Windows Presentation Foundation (WPF) とともに導入されました。この時点で、最高クラスの Web サービス プラットフォームをマイクロソフトがリリースしたことになります。このプラットフォームにより、スケーラビリティ、パフォーマンス、セキュリティ、信頼性の高いメッセージ配信、トランザクション、マルチスレッド、非同期メッセージングなどを実現するのに不可欠なプラミングを使用して、サービスの設計、実装、および配置を容易に行うことができるようになります。

2007 年 11 月、Visual Studio 2008 と同時に .NET Framework 3.5 がリリースされ、以下のような追加機能が WCF に導入されました。

  • Plain Old XML (POX)、Representational State Transfer (REST)、JavaScript Object Notation (JSON) などの Web プログラミング モデル、および Really Simple Syndication (RSS) や ATOM などの配信フィードに対する組み込みのサポート
  • 最新の Web サービス標準のサポート
  • ASP.NET AJAX クライアントとの統合の強化
  • 部分信頼環境のサポート。たとえば、ASP.NET を実行するホスティング環境で部分信頼性で実行していても WCF サービスをホストできます。また、ブラウザー内の JavaScript や ClickOnce アプリケーションなどを実行するクライアントが部分信頼で実行している場合も WCF プロキシを使用できます。
  • カスタム実行コンテキスト、および耐久性がある実行時間の長いサービスのサポート
  • サービスをワークフローとして記述し、ワークフローからサービスを呼び出せるようにする、WCF と WF のシームレスな統合
  • Visual Studio 2008 と直接統合される生産性向上ツール

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

SOA 向けのプラットフォーム

サービス指向アーキテクチャ (SOA) は、コンポーネント指向のプログラミングが進化した技術です。SOA により、ビジネス機能をカプセル化、再利用、および分散できるだけでなく、テクノロジ プラットフォーム間で相互運用できるというメリットも得られます。システム設計にサービス指向の手法を採用すると、ビジネス ロジックと、そのビジネス ロジックが基づくプロトコルが明確に分離されます。これにより、システムの柔軟性が向上し、システムが配置シナリオ用に最適化されて、メンテナンスが容易になります。サービスは、セキュリティの自然な境界、および分散とスケールアウトの自然な境界を提供します。相互運用可能なサービスを介して機能を公開すると、システムの影響がより広範囲に及ぶようになるため、新たなマーケティング経路が開かれます。

WCF は、次の点を考慮し、SOA を使用してビルドされました。

  • サービスの設計と実装を、必然的に、アプリケーション ビジネス ロジックから分離する。そのため、既存のコンポーネントを作り直すことなく、既存のアプリケーションをサービス指向の設計に簡単に移行できます。
  • サービスは、オプトイン手法を使用し、明示的なコントラクトを介してリモート クライアントに機能を公開する。
  • エラーが発生した場合、サービスは他のサービスに影響を及ぼすことなく自律的に実行される。
  • 分散コンピューティングのさまざまなシナリオに適合するさまざまなプロトコルに基づいてサービスを配置できる。
  • サービスは、主要ベンダーとの相互運用性をサポートする。
  • サービスは、Web 上で直接公開したり、イントラネットに公開したり、企業のバックエンドで使用したりできる。

統一プログラミング モデル

WCF はエンタープライズ サービスや COM+、.NET リモーティング、System.Messaging、ASP.NET Web サービス (ASMX)、および Web Services Enhancements (WSE) が進化した技術です。これらはすべて、さまざまな分散コンピューティング シナリオに適合させるためにこれまで使用されてきたテクノロジです。WCF は、あらゆるシナリオに適合します。たとえば、相互運用可能な Web サービス、Web 2.0 プログラミング モデル (POX、REST、JSON、RSS/ATOM など)、従来のクライアント サーバー シナリオ、ファイアウォールの内側にあるプロセスとコンピューターの境界をまたがるパフォーマンスの高い呼び出し、Microsoft メッセージ キュー (MSMQ) を基盤とする耐久性と信頼性があるキュー メッセージングといったシナリオです。

単一の統一プログラミング モデルによりこのような各シナリオがサポートされるため、開発者はサービスの設計、構成、および配置に一貫性のあるエクスペリエンスが得られます。WCF の開発者は、さまざまな分散コンピューティングのニーズをサポートするために、さまざまなテクノロジやオブジェクト モデルを習得する必要はありません。WCF を使用して 1 つのプラットフォームの知識を応用し、あらゆるシナリオに適合させることができます。このため、それぞれの層で適切なプロトコルを使用して、すべてのシステムで通信を簡単に最適化できます。また、開発とメンテナンスの生産性が大幅に向上します。サービスをいったん設計して実装したら、さまざまなシナリオに公開できます。

開発者の生産性

WCF には、以下のように、サービス指向の分散システムをビルドする際に開発者の生産性を高める要素が数多くあります。

  • Visual Studio 2008 には、WCF プロジェクトと WCF サービスを生成するため、およびサービスを配置する際にランタイム環境を構成するための一連のテンプレートとツールがあります。
  • WCF には、サービス指向のシステムをビルドするのに不可欠なプラミングが用意されています。つまり、開発者は、セキュリティ、信頼性の高い配信、トランザクション、マルチスレッド、メッセージング キューなどのシステム機能に関連するコードを記述するのではなく、抱えているビジネス問題に重点を置いて取り組むことができます。
  • サービスは、インターネット インフォメーション サービス (IIS)、Windows プロセス アクティブ化サービス (WAS)、Windows NT サービス、Windows フォーム、WPF クライアント アプリケーションなど、あらゆる Windows プロセスでホストできます。開発者は、アプリケーション シナリオに適したホスティング環境を選択でき、可能な場合は、IIS と WAS によって提供される組み込みのホスティング機能を利用できます。

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

WCF では、サービスの設計、ホスティング環境、および通信をサポートするために必要なプロトコルの構成が密接に関連しないようにしています。開発者は、サービスを設計してビジネス機能をカプセル化します。その際、配置の要件は無関係です。適切なホスティング環境と通信プロトコルは、アプリケーション シナリオに合わせて後から選択できます。ここでは、WCF が広範に使用される典型的なシナリオをいくつか紹介し、各シナリオを支えるコア機能についてまとめます。

エンタープライズ Web サービス

エンタープライズ Web サービスは、SOAP プロトコルに基づくサービスです。このサービスでは、高度な Web サービス標準 (WS* と総称されます) をいくつでも使用できます。このような標準を使用すると、セキュリティと信頼性を備え、トランザクション処理を行う、完全に相互運用可能なメッセージ交換が容易になります。一般に、アプリケーションはこのような標準に依存して、複数のプラットフォームやテクノロジにまたがる相互運用可能なメッセージングを行ったり、インターネットやファイアウォールを介してアクセス可能なサービスを公開したりします。

マイクロソフトのオープン スタンダードへの取り組みは、テクノロジとしての Web サービスの進化全体を通じて明確に示されています。ASP.NET Web サービス (ASMX) では早期バージョンの SOAP プロトコルがサポートされ、ASMX のアドオンである Web Services Enhancements (WSE) では WS* プロトコルの早期実装が提供されました。WCF ではこの流れを受け、次のような最新のすべての WS* プロトコルに対する組み込みサポートを提供しています。

  • メッセージング: SOAP、WS-Addressing、MTOM
  • メタデータ: WSDL、WS-MetadataExchange、WS-Policy
  • セキュリティ: WS-Security、WS-SecureConversation、WS-Trust
  • 信頼性とトランザクション: WS-ReliableMessaging、WS-Coordination、WS-AtomicTransaction

WCF では、以前のバージョンの WS* プロトコルもサポートしています。このようなプロトコルは、マイクロソフト以外の多数のプラットフォームや WSE によって採用されていたので、下位互換性を確保するために、このようなサポートを行っています。WS* プロトコルのサポートを有効にする作業は単純で、WCF サービスにとって適切なバインド構成を選択するだけです。開発者は、プロトコルの実装の詳細をまったく意識する必要はありません。

Web プログラミング モデル

Web 2.0 プログラミング パラダイムは、メディアや対話型コンテンツが充実しているグラフィカルな Web インターフェイスを生成するための AJAX、Silverlight、その他の同様のクライアント テクノロジの場合と同様に、JavaScript を使用する Rich Internet Applications (RIA) をビルドするためのパラダイムとして人気が高まってきています。.NET Framework 3.5 から、WCF には Web 2.0 に適した以下の代替メッセージング スタイルのサポートが組み込まれています。

  • POX: SOAP プロトコルの規則が適用されない簡易 XML メッセージング。
  • REST: 中核となる部分の多くを POX に依存する SOAP の代替形式。インターネット経由でのリソースのアクセスに URI ベースのパターンを使用するアーキテクチャ スタイルです。
  • JSON: XML の代替となる簡易メッセージング形式。転送と処理のオーバーヘッドを小さく抑えて、JavaScript クライアントでサービスを使ってデータを交換する場合に特に役立ちます。
  • RSS および ATOM: XML に基づく配信形式。ブログ エントリなど、順次更新されるデータ フィードを共有する場合に特に役立ちます。

これらのメッセージング スタイルでは、セキュリティと信頼性を備え、トランザクション処理を行う、エンタープライズ Web サービスの配信セマンティクスが提供されません。ただし、これらのスタイルでは、JavaScript と Web クライアントからコンテンツにアクセスするだけなので、オーバーヘッドが軽減します。繰り返しになりますが、開発者は同じプログラミング モデルを使用して、これらの形式をサポートするサービスを実装できます。.NET Framework 3.5 では、新しい宣言型の属性、バインド、および構成設定が多数提供され、目的の形式を選択しやすくなったので、この作業が簡単になりました。

イントラネット アプリケーション

一般に、イントラネット アプリケーションはファイアウォールの内側に存在し、Windows ドメインに依存して認証と承認を行い、相互運用可能なプロトコルを必要としません。以前は、このシナリオをサポートするために、.NET リモーティングやエンタープライズ サービスを使用して、ファイアウォールの内側にあるプロセスとコンピューターの境界にまたがってビジネス機能を公開していました。WCF を使用すると、開発者は使い慣れた同じプログラミング モデルを使用して、サービスを設計、ホスト、および構成できます。ただし、セキュリティ モデルの違いや最適化されたパフォーマンスに合った適切な一連のプロトコルを選択することができます。

イントラネット サービスは、以下のシナリオでよく使用されます。

  • Windows クライアントがファイアウォールの内側にあるサービスと通信する、従来のクライアント サーバー アプリケーション。
  • ファイアウォールの内側にあるサービスを利用する ASP.NET Web クライアント。このサービスは、ダウンストリームのアプリケーション サーバーに分散される場合もあります。
  • サービス指向のシステム設計の一環として行う、プロセスやコンピューターの境界にまたがるサービスの分散。これは、必要なセキュリティ境界の導入、およびスケールアウト要件のサポートにも役立ちます。

イントラネット アプリケーションでは、WCF の最適化されたバイナリ メッセージング形式を使用します。そのため、通信の両端に存在するアプリケーションで WCF を使用する必要があります。

非接続型のメッセージング

非同期の非接続型メッセージング パターンは、サービス指向アプリケーション内で疎結合の通信を可能にします。これにより、実行時間が長いプロセスを応答を待たずに実行したり、負荷レベルを設定したり、サービス、機器、またはネットワークが一時的にオフラインの場合でもメッセージを確実に配信したりできるようになります。Microsoft メッセージ キュー (MSMQ) は、このようなシナリオをサポートするメッセージング プラットフォームです。WCF サービスでは、接続型のクライアント アプリケーションから直接メッセージを受け取るのではなく、非同期の非接続型のシナリオをサポートしてキューからメッセージを受け取ることができます。この機能を使用すると、以下のようなシナリオでメッセージングを使用するシステムを設計できます。

  • メッセージの配信を保証する
  • 実行時間が長い操作への同期呼び出しのオーバーヘッドを軽減する
  • 非接続型のシナリオをサポートする
  • 使用可能なサーバー リソース間に機能を分散する
  • 非接続型の発行と購読のシナリオを実装する

メッセージ キューをリッスンするように WCF サービスを構成する作業は単純で、MSMQ プロトコルをサポートする正しいバインド構成を選択するだけです。

ワークフロー サービス

実行時間が長く複雑なビジネス プロセスは、多くの場合、ワークフロー テクノロジを使用すれば適切に表現できます。ワークフロー テクノロジを使用すると、プロセスがわかりやすくなり、予測可能性が向上し、自動化によってオーバーヘッドが軽減されます。.NET Framework 3.5 でリリースされた新機能では、以下に示すように、WCF サービスと直接的に相互作用するワークフローを WF で定義する新しい方法が導入されています。

  • ワークフローを WCF サービスとして公開できます。その結果、リモート クライアント アプリケーションから、ワークフロー インスタンスをサポートする適切な実行ポイントでそのワークフロー インスタンスと直接相互作用するメッセージを容易に送信できるようになります。
  • ワークフローでは WCF サービスを直接呼び出すことができるため、サービス指向のアプリケーション内で複数のサービスによって公開される機能を使用する実行時間が長いプロセスを実装しやすくなります。

ワークフローでは永続化もサポートされます。つまり、WCF サービスとして公開されるワークフローは、ワークフローとサービスの状態を保存する耐久性があるサービスにすることもできます。このため、ワークフローに関連付けられているシステム リソースをアイドル時に解放し、クライアントがワークフロー インスタンスと再び相互作用するときに読み込み直すことができます。

耐久性があるサービスは、ワークフロー サービスと切り離して使用することもできます。耐久性があるサービスでは、WF によって公開される永続化サービスを使用して、セッションをサポートするサービスが操作の呼び出し後に自動的に状態を保存し、新しい呼び出しが同じセッション内に届いたらその状態を再度捕捉できるようにします。

▲ Top of Page