次の図は、Windows Communication Foundation (WCF) アーキテクチャの主要なレイヤーを示しています。
WCF アーキテクチャ
コントラクトと説明
コントラクトは、メッセージ システムのさまざまな側面を定義します。 データ コントラクトは、サービスが作成または使用できるすべてのメッセージを構成するすべてのパラメーターを記述します。 メッセージ パラメーターは、XML スキーマ定義言語 (XSD) ドキュメントによって定義され、XML を理解しているシステムがドキュメントを処理できるようにします。 メッセージ コントラクトは、SOAP プロトコルを使用して特定のメッセージ部分を定義し、相互運用性がこのような精度を要求する場合に、メッセージの一部をきめ細かく制御できるようにします。 サービス コントラクトは、サービスの実際のメソッド シグネチャを指定し、Visual Basic や Visual C# などのサポートされているプログラミング言語のいずれかでインターフェイスとして配布されます。
ポリシーとバインドは、サービスとの通信に必要な条件を規定します。 たとえば、バインディングでは(少なくとも) 使用されるトランスポート (HTTP や TCP など) とエンコードを指定する必要があります。 ポリシーには、サービスと通信するために満たす必要があるセキュリティ要件やその他の条件が含まれます。
サービス ランタイム
サービス ランタイム レイヤーには、サービスの実際の操作中、つまりサービスのランタイム動作中にのみ発生する動作が含まれています。 調整は、処理されるメッセージの数を制御します。これは、サービスの需要が事前設定された制限に達した場合に変更できます。 エラー動作は、サービスで内部エラーが発生したときに発生する処理を指定します。たとえば、クライアントに通信する情報を制御します。 (情報が多すぎると、悪意のあるユーザーに攻撃をマウントする利点が得られます)。メタデータの動作は、メタデータを外部で使用できるようにする方法とかどうかを制御します。 インスタンスの動作では、実行できるサービスのインスタンスの数を指定します (たとえば、シングルトンは、すべてのメッセージを処理するインスタンスを 1 つだけ指定します)。 トランザクションの動作により、エラーが発生した場合にトランザクション操作をロールバックできます。 ディスパッチ動作は、WCF インフラストラクチャによってメッセージがどのように処理されるかを制御します。
拡張性により、ランタイム プロセスのカスタマイズが可能になります。 たとえば、メッセージ検査はメッセージの一部を検査する機能であり、パラメーター フィルターを使用すると、メッセージ ヘッダーに対して動作するフィルターに基づいて事前設定されたアクションを実行できます。
メッセージング
メッセージング層はチャネルで構成 されます。 チャネルは、メッセージを認証するなどして何らかの方法でメッセージを処理するコンポーネントです。 チャネルのセットは、 チャネル スタックとも呼ばれます。 チャネルは、メッセージとメッセージ ヘッダーで動作します。 これは、主にメッセージ本文の内容の処理に関連するサービス ランタイム レイヤーとは異なります。
チャネルには、トランスポート チャネルとプロトコル チャネルの 2 種類があります。
トランスポート チャネルは、ネットワーク (または外部との他の通信ポイント) からのメッセージの読み取りと書き込みを行います。 一部のトランスポートでは、エンコーダーを使用してメッセージ (XML Infoset として表される) を、ネットワークで使用されるバイト ストリーム表現との間で変換します。 トランスポートの例としては、HTTP、名前付きパイプ、TCP、MSMQ があります。 エンコードの例としては、XML と最適化されたバイナリがあります。
プロトコル チャネルは、メッセージ処理プロトコルを実装します。多くの場合、メッセージに追加のヘッダーを読み書きします。 このようなプロトコルの例としては、WS-Security と WS-Reliability などがあります。
メッセージング層は、データの可能な形式と交換パターンを示しています。 WS-Security は、メッセージ層でセキュリティを有効にする WS-Security 仕様の実装です。 WS-Reliable メッセージング チャネルを使用すると、メッセージ配信が保証されます。 エンコーダーには、メッセージのニーズに合わせて使用できるさまざまなエンコードが用意されています。 HTTP チャネルは、ハイパーテキスト トランスポート プロトコルをメッセージ配信に使用することを指定します。 TCP チャネルも同様に TCP プロトコルを指定します。 トランザクション フロー チャネルは、トランザクション メッセージ パターンを管理します。 名前付きパイプ チャネルを使用すると、プロセス間通信が可能になります。 MSMQ チャネルを使用すると、MSMQ アプリケーションとの相互運用が可能になります。
ホスティングとアクティブ化
最終的な形式では、サービスはプログラムです。 他のプログラムと同様に、実行可能ファイルでサービスを実行する必要があります。 これは セルフホステッド サービスと呼ばれます。
サービス は、ホストすることも、IIS や Windows ライセンス認証サービス (WAS) などの外部エージェントによって管理される実行可能ファイルで実行することもできます。 WAS を使用すると、WAS を実行しているコンピューターに展開するときに WCF アプリケーションを自動的にアクティブ化できます。 サービスは、実行可能ファイル (.exe ファイル) として手動で実行することもできます。 サービスは、Windows サービスとして自動的に実行することもできます。 COM+ コンポーネントは、WCF サービスとしてホストすることもできます。