WCFの基本的な概念:Windows Communication Foundation概説(1/2 ページ)
次期コミュニケーション技術「WCF」の最重要概念“ABC”とは何か? まずはWCFの基礎の基礎を押さえよう。
前回は、Windows Communication Foundation(以降、WCFと略す)と命名されたコミュニケーション基盤技術に関して、その登場の背景を中心に「なぜマイクロソフトは新しい通信インフラを提供することになったのか?」、また「そこにはどんな狙いがあるのか?」、さらには「そのテクノロジを採用するメリットは何なのか?」といったところを見てきた。
今回はWCFの基本的な概念について解説する。多少、抽象的で分かりにくいかもしれないが、今回説明する個々の概念がよく理解できなくても、次回のプログラミング例までを併せて読み進めていただければ全体的に把握できるだろう。ぜひ最後までお付き合いいただきたい。
なお、ここに記載した内容は製品出荷前の現段階(2006 February CTP段階)での内容であるため将来変更される可能性が十分あることをあらかじめご了承いただきたい。
WCF理解に必要な基本的な概念の整理
■“ABC”とは
WCFの基本的な概念の中でも真っ先に理解しておくべきなのが“ABC”である。
それでは、ABCとは何なのか。WCFでのアプリケーション間通信の様子を以下の図に描いてみた。
WCFにおけるアプリケーション間通信は、基本的にはサービスの提供者と利用者の2者の間で、おのおのが相互にメッセージを交換することで通信が成立する。ここでサービス提供者を「サービス」と呼ぶ場合もあれば、「サーバ」と呼ぶ場合もある。またサービス利用者は「コーラー」(サービスを呼び出す側)と呼ぶ場合もあれば、単に「クライアント」と呼ぶ場合もある。
ただ、注意していただきたいのは、WCFでの通信の場合、従来のクライアント/サーバといった単純な図式ばかりではないということ。なぜならネットワーク上に分散したさまざまなコンポーネント(サービスとしてのインターフェイスを持つサービス・コンポーネント)間の相互接続形態においては、サーバ兼クライアントといった場合が多々あり得るからだ。しかし、ここでは話を単純化するために、クライアントとサービスといった表現で進めていく。
さて、クライアントとサービスが通信を行い、メッセージを交換することで分散アプリケーションが構成されていく。このときの双方のメッセージの出入り口に当たる端点となる部分を「エンドポイント」と呼んでいる。つまりWCFにおいてまずはこのエンドポイントを定義する必要があるわけである。
では具体的にエンドポイントをどのように定義するかであるが、そこで“ABC”という概念が登場する。ABCとは、A:Address(アドレス)、B:Binding(バインディング)、C:Contract(コントラクト)の略称である。
- A:アドレス
「Where」を意味し、どのアドレスに対してメッセージを送るのか、あるいはどのアドレスでメッセージを受けるのか、といった定義となる。 - B:バインディング
「How」を意味し、どのようにメッセージを送るのか、あるいはメッセージを受けるのかを示す。具体的にはどのようなトランスポート・プロトコルで通信し、どのようなエンコーディングを採用するのか、といったような、どちらかというとトランスポート・プロトコル・レベルの定義となる。 - C:コントラクト
「What」を意味し、何を交換するのか、を意味する。具体的にはほかに公開するサービスは何で(=サービス・コントラクト)、あるいは利用しようとするサービスは何で(=オペレーション・コントラクト)、そして交換するメッセージは何か(=データ・コントラクトもしくはメッセージ・コントラクト)を定義することになる。
以上のABCの定義によってエンドポイントを構成し、クライアントおよびサービスが互いに通信する出入り口を確定することになるのである。この、ABCがWCFでサービスおよびクライアントを構築するときに必要となる重要な概念なのである。
エンドポイントを構成するA、B、C
メッセージの出入り口に当たる部分であるエンドポイントはA、B、Cの3つの要素で構成される。A:Address(アドレス)は「Where」、B:Binding(バインディング)は「How」、C:Contract(コントラクト)は「What」に相当する。
それではさらに具体的に、このABCそれぞれの内容について見ていこう。
1. A:アドレス=「Where」
まずはアドレスの定義であるが、先ほども述べたように、クライアントから見た場合、提供されているサービスのどのアドレスに対してメッセージを送るのか、あるいはサービスから見た場合、どのアドレスでメッセージを受けるのか、といった定義となる。
アドレスの表現方法はWCFで標準的に対応しているトランスポート・プロトコルとして何を選択するかによって異なる。次の表はアドレスの定義方法の例である。
プロトコル | アドレスの指定例 |
---|---|
HTTP | http://www.sample.com/MyService/ |
HTTPS | https://www.sample.com:8000/MyService/ |
TCP | net.tcp://www.sample.com:8000/MyService/ |
Named-Pipe | net.pipe://machine-name/MyService/ |
MSMQ | net.msmq://machine-name/private/MyQueues/ |
トランスポート・プロトコル別のアドレスの指定例 |
このようなアドレスの指定をコンフィグレーション・ファイルあるいはソース・コードで設定することになる。基本的には「プロトコルのスキーマ名://マシン名:ポート番号/サービスのパス/」といった形式となるが、Named-Pipe(=名前付きパイプ)とMSMQの場合はポート番号の指定は必要ない。
2. B:バインディング=「How」
バインディングの指定方法は、通常、用途別に標準で提供されている(プリセット済み)バインディング・セットの中から選択することで、使用するプロトコルおよびエンコーディングを選択するといった形を取ることが一般的である。
標準的に提供されるバインディング・セットとしては次の表のものが挙げられる。
バインディング・セット名 | 主な特徴 |
---|---|
BasicHttpBinding | WS-I Basic Profile 1.1(WS-I BP 1.1)に準拠した相互運用性の高いWebサービスによる通信を行わせたい場合に使用 |
WsHttpBinding | Webサービス拡張仕様(WS-*)を使用したより高機能なWebサービスによる通信を行わせたい場合に使用 |
WsDualHttpBinding | Webサービス拡張仕様(WS-*)を使用したより高機能なWebサービスによる通信で、しかも非同期双方向通信を行わせる場合に使用 |
NetTcpBinding | .NET対向(WCF間の通信)に最適化された高速なマシン間の通信を行わせたい場合に使用 |
NetNamedPipeBinding | .NET対向(WCF間の通信)に最適化された高速なマシン内プロセス間通信を行わせたい場合に使用 |
NetMsmqBinding | MSMQによるWCFアプリケーション間の通信を行わせたい場合に使用 |
MsmqIntegrationBinding | 既存のMSMQアプリケーションとWCFとの相互接続を行わせたい場合に使用 |
標準のバインディング・セット名とその概要 |
なお、このような標準セットで補い切れない場合はカスタム・バイディングという細かなパラメータをすべて個別に定義していく手法を取ることになる。
それぞれのバインディング・セットで使用される下位のトランスポート・プロトコルやエンコーディングは下記のようになっている。
バインディング・セット名 | 通信プロトコル | 相互運用性 | 通信区間 | エンコーディング | セキュリティ | セッション | リライアビリティ | トランザクション | メッセージング・パターン |
---|---|---|---|---|---|---|---|---|---|
BasicHttpBinding | HTTP、HTTPS | WS-I BP 1.1 | マシン間 | Text | ○ | Simplex、Request-Reply | |||
WsHttpBinding | HTTP、HTTPS | WS-* | マシン間 | Text、MTOM | ○ | ○ | ○ | ○ | Simplex、Request-Reply |
WsDualHttpBinding | HTTP | WS-* | マシン間 | Text、MTOM | ○ | ○ | ○ | ○ | Simplex、Request-Reply, Duplex |
NetTcpBinding | TCP | WCF対向 | マシン間 | Binary | ○ | ○ | ○ | ○ | Simplex、Request-Reply、Duplex |
NetNamedPipeBinding | Named-Pipe | WCF対向 | プロセス間 | Binary | ○ | ○ | ○ | Simplex、Request-Reply、Duplex | |
NetMsmgBinding | MSMQ | WCF対向 | マシン間 | Binary | ○ | ○ | ○ | ○ | Simplex |
MsmqIntegrationBinding | MSMQ | 既存のMSMQアプリケーションとWCFの相互運用 | マシン間 | Text | ○ | ○ | ○ | ○ | Simplex |
標準のバインディング・セットごとの特徴 Text/XML=テキスト形式XML。MTOM(SOAP Message Transmission Optimization Mechanism)=バイナリ・データを含むSOAPメッセージ。 |
標準で提供されているバインディングのセットから、要件にふさわしいものを選択した方が細かなパラメータ設定の煩雑さもないといえる。
なお、標準のバインディング・セットの選択基準であるが、おおむね以下の図のようになる。ほかのプラットフォームとの相互運用性を確保するかどうかで大きく2つに選択肢が分かれる。
ここで若干補足しておきたいのだが、標準のバイディング・セットは1つのエンドポイントに対して1つ選択することになるが、1つのサービスには複数のエンドポイントを持たせることが可能だ。例えば、WCF対向通信用にTCPをトランスポートとしたエンドポイントを持たせ、なおかつ相互運用性確保のためにWS-I BP 1.1準拠のエンドポイントを同時に持たせてもよいわけである。
このように、エンドポイントは1つのサービスに対して用途別に複数同時に持たせることが可能である(下図)。
さて、次にコントラクトの定義を見ていこう。
Copyright© Digital Advantage Corp. All Rights Reserved.