WCF (Windows Communication Foundation) 用語集

Windows Communication Foundation (WCF) では、次の用語が定義されています。

用語

用語 定義

アドレス

アドレスは、メッセージを受信する場所を指定します。アドレスは、URI (Uniform Resource Identifier) として指定されます。URI のスキーマ部分では、そのアドレスに到達するために使用するトランスポート機構 (HTTP、TCP など) を指定します。URI の階層部分には一意の場所が含まれ、その形式はトランスポート機構によって異なります。 エンドポイント アドレスにより、サービスのエンドポイントごとに一意のエンドポイント アドレスを作成できます。また、一定の条件下では、エンドポイント間でアドレスを共有することもできます。

アプリケーション エンドポイント

アプリケーションによって公開されるエンドポイントです。アプリケーション エンドポイントは、アプリケーションで実装されるサービス コントラクトに対応しています。

動作

動作は、サービス、エンドポイント、特定の操作、またはクライアントの実行時のさまざまな状況を制御するコンポーネントです。動作はスコープに従ってグループ化されます。共通動作は、すべてのエンドポイントにグローバルに作用し、サービス動作は、サービスに関連する側面にのみ作用します。また、エンドポイントの動作は、エンドポイントに関連するプロパティにのみ作用し、操作レベルの動作は特定の操作に作用します。

バインディング

バインディングは、エンドポイントが外部と通信する方法を定義します。バインディングは、バインディング要素と呼ばれる一連のコンポーネントで構成されます。各バインディング要素を "積み重ねる" ことで、通信インフラストラクチャが作成されます。バインディングでは、少なくともトランスポート (HTTP や TCP など) と使用するエンコード (テキストやバイナリなど) が定義されます。バインディングには、メッセージをセキュリティで保護するために使用するセキュリティ機構や、エンドポイントが使用するメッセージ パターンなどの詳細を指定したバインディング要素を含めることができます。

バインディング要素

バインディング要素は、バインディングの特定の部分 (トランスポート、エンコード、インフラストラクチャ レベルのプロトコル (WS-ReliableMessaging など) の実装、通信スタックのその他のコンポーネントなど) を表します。

チャネル

チャネルは、バインディング要素の具象実装です。バインディングは構成を表し、チャネルはその構成に関連付けられた実装です。したがって、各バインディング要素に関連付けられたチャネルが存在します。チャネルが積み重ねられて、バインディングの具象実装 (チャネル スタック) が作成されます。

クライアント アプリケーション

クライアント アプリケーションは、1 つ以上のエンドポイントとメッセージを交換するプログラムです。クライアント アプリケーションは、WCF クライアントのインスタンスを作成し、WCF クライアントのメソッドを呼び出すことによって開始されます。1 つのアプリケーションがクライアントとサービスの両方として機能できることに注意してください。

コーディング

開発者は、サービスまたはクライアントのすべてのコンポーネントに対する厳密な制御を保持できます。構成によって行われた設定を検査し、必要に応じてコードによって無効にできます。アプリケーションは、コーディング、構成、またはこの 2 つの組み合わせによって制御できます。

構成

構成には、コードの作成後、再コンパイルを必要とせずに、開発者以外のユーザー (ネットワーク管理者など) がクライアントとサービスのパラメータを設定できるという利点があります。構成では、エンドポイント アドレスなどの値を設定できるだけでなく、エンドポイント、バインディング、および動作の追加が可能であるため、制御を強化することもできます。アプリケーションは、構成、コーディング、またはこの 2 つの組み合わせによって制御できます。

コントラクト

コントラクトは、特定の種類のコントラクトに対するサポート仕様です。たとえば、サービス コントラクトは、操作のグループに対する仕様です。WCF では、コントラクトは階層構造を持ち、これは System.ServiceModel.Description 名前空間に存在する説明オブジェクトにミラー化されています。サービス コントラクトは、WCF で最も大きなコントラクト スコープです。サービス コントラクトの各サービス操作には、エラー メッセージを含め、操作により交換されるメッセージとその交換方向を規定した操作コントラクトがあります。操作の各メッセージには、メッセージ コントラクト、つまり SOAP メッセージ エンベロープの構造仕様があり、個々のメッセージ コントラクトには、メッセージに含まれるデータ構造を規定したデータ コントラクトがあります。

データ コントラクト

サービスが使用するデータ型をメタデータに記述して、他のサービスをそのサービスと相互運用できるようにする必要があります。データ型の記述は、データ コントラクトと呼ばれます。型は、メッセージの任意の部分で使用できます (パラメータや戻り値の型など)。サービスが単純型だけを使用している場合、データ コントラクトを明示的に使用する必要はありません。

エンドポイント

エンドポイントは、メッセージを送信または受信 (または送受信) する場所となる構造体です。エンドポイントには、どこにメッセージを送信できるかを明確に示す場所 (アドレス)、メッセージの送信方法を記載した通信機構の仕様 (バインディング)、およびその場所で送信または受信 (または送受信) 可能な一連のメッセージの内容を示す定義 (サービス コントラクト) が含まれます。 WCF サービスは、エンドポイントの集まりとして外部に公開されます。

エラー コントラクト

エラー コントラクトをサービス操作に関連付けることにより、呼び出し元に返すことのできるエラーを示すことができます。操作には、0 個以上のエラーを関連付けることができます。これらのエラーは、プログラミング モデルで例外としてモデル化される SOAP エラーです。例外は SOAP エラーに変換され、その後、クライアントに送信されます。

ホスト

サービスは、何らかのプロセス内でホストされている必要があります。ホストは、サービスの有効期間を制御するアプリケーションです。サービスは、自己ホスト型であっても、既存のホスティング プロセスによって管理されていてもかまいません。

ホスティング プロセス

ホスティング プロセスは、サービスをホストするように設計されたアプリケーションです。ホスティング プロセスには、インターネット インフォメーション サービス (IIS)、Windows アクティブ化サービス (WAS)、Windows サービスなどがあります。これらのホスト シナリオでは、ホストがサービスの有効期間を制御します。たとえば、IIS を使用して、サービス アセンブリや構成ファイルを格納する仮想ディレクトリを設定できます。メッセージを受信すると、IIS はサービスを開始し、その有効期間を制御します。

開始操作

新しいセッションの最初の操作として呼び出される操作です。開始操作以外の操作は、少なくとも 1 つの開始操作が呼び出された後にしか呼び出すことはできません。

インスタンス化モデル

サービスには、インスタンス化モデルが含まれます。インスタンス化モデルには、1 つの CLR オブジェクトがすべてのクライアントにサービスを提供する "単一モデル"、クライアント呼び出しを処理するために、呼び出しごとに新しい CLR オブジェクトが作成される "呼び出しモデル"、および CLR オブジェクトのセットがセッションごとに 1 つ作成される "セッション モデル" の 3 つがあります。インスタンス化モデルの選択は、アプリケーション要件とサービスの予想される使用パターンによって異なります。

メッセージ

メッセージは、本文やヘッダーなどの複数の部分で構成される独立したデータ単位です。

メッセージ コントラクト

メッセージ コントラクトは、メッセージの形式を記述します。たとえば、メッセージ要素をヘッダーと本文のどちらに入れるか、メッセージのどの要素にどのレベルのセキュリティを適用するかなどを宣言します。

メッセージ セキュリティ モード

メッセージ セキュリティ モードでは、セキュリティ仕様の 1 つまたは複数を実装することによりセキュリティが提供されます。各メッセージには、メッセージ送信中のセキュリティを確保し、受信側による改ざんの検出とメッセージの復号化を可能にするために必要な機構が含まれます。この意味で、セキュリティはすべてのメッセージ内にカプセル化されるため、複数のホップにわたるエンド ツー エンドのセキュリティが実現します。セキュリティ情報はメッセージの一部になるため、メッセージと共に複数の種類の資格情報を含めることもできます (これらはクレームと呼ばれます)。この方法には、送信元と送信先の間の複数のトランスポートを含め、どのトランスポート上でもメッセージを安全に送信できるという利点もあります。この方法の欠点は、使用される暗号化機構が複雑であるため、パフォーマンスに影響することです。

メタデータ

サービスのメタデータは、外部エンティティがそのサービスと通信するために認識しておく必要のあるサービスの特性を示します。ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) でメタデータを使用することにより、クライアント アプリケーションがサービスとやり取りするために使用できる、WCF クライアントと付随する構成を生成できます。 サービスが公開するメタデータには、サービスのデータ コントラクトが定義された XML スキーマ ドキュメントと、サービスのメソッドが記載された WSDL ドキュメントが含まれます。 メタデータを有効にすると、WCF によってサービスとそのエンドポイントが検査され、サービスのメタデータが自動的に生成されます。サービスからメタデータを公開するには、メタデータの動作を明示的に有効にする必要があります。

操作コントラクト

操作コントラクトは、操作のパラメータと戻り値の型を定義します。サービス コントラクトを定義するインターフェイスの作成時に、コントラクトに含まれる各メソッド定義に T:System.ServiceModel.OperationContractAttribute 属性を適用することによって、操作コントラクトを表します。各操作は、単一のメッセージを取得し、単一のメッセージを返すようにモデル化することも、一連の型を取得し、型を返すようにモデル化することもできます。後者の場合、その操作用に交換する必要のあるメッセージの形式がシステムによって決定されます。

セキュリティ

WCF のセキュリティには、機密性 (盗聴を防ぐためのメッセージの暗号化)、整合性 (メッセージの改ざんを検出するための手段)、認証 (サービスとクライアントを検証する方法)、承認 (リソースへのアクセスの制御) が含まれます。これらの機能は、TLS over HTTP (HTTPS とも呼ばれます) などの既存のセキュリティ機構を利用するか、さまざまな WS-* セキュリティ仕様の中から 1 つ以上の仕様を実装することによって実現されます。

自己ホスト型サービス

自己ホスト型サービスは、開発者が作成したプロセス アプリケーション内で実行されるサービスです。開発者は、サービスの有効期間を制御し、サービスのプロパティを設定します。また、サービスを開き (サービスをリッスン モードに設定する)、サービスを閉じることも開発者が行います。

サービス

サービスは、1 つ以上のエンドポイントを公開する構造体です。各エンドポイントは、1 つ以上のサービス操作を公開します。

サービス コントラクト

サービス コントラクトは、関連する複数の操作を 1 つの機能単位に関連付けます。コントラクトでは、サービスの名前空間や対応するコールバック コントラクトなど、サービス レベルの設定を定義できます。ほとんどの場合、開発者は選択したプログラミング言語でインターフェイスを作成し、このインターフェイスに T:System.ServiceModel.ServiceContractAttribute 属性を適用することによって、コントラクトを定義します。実際のサービス コードは、インターフェイスを実装することによって作成されます。

サービス操作

サービス操作は、操作の機能を実装するためにサービスのコードに定義された手順です。この操作は、WCF クライアントのメソッドとしてクライアントに公開されます。メソッドは、値を返すこともあれば、任意の数の引数を受け取ることもあります。また、引数を受け取らず、応答を返さないこともあります。たとえば、"Hello" という機能を持つ操作をクライアントの存在の通知として使用したり、一連の操作を開始するために使用したりできます。

システム指定のバインディング

WCF には、システム指定のバインディングが多数用意されています。これらは、特定のシナリオ用に最適化されたバインディング要素の集まりです。たとえば、T:System.ServiceModel.WSHttpBinding は、さまざまな WS-* 仕様を実装するサービスと相互運用できるようにデザインされています。これらのバインディングでは、特定のシナリオに適切に適用できるオプションだけが提供されるため、時間を節約できます。これらのバインディングでは要件が満たされない場合は、独自のカスタム バインディングを作成できます。

終了操作

既存セッションの最後のメッセージとして呼び出される操作です。既定では、WFC は、サービスが関連付けられているセッションが閉じられた後に、サービス オブジェクトとそのコンテキストを再利用します。

トランスポート セキュリティ モード

セキュリティは、トランスポート モード、メッセージ セキュリティ モード、およびメッセージ資格情報付きトランスポート モードのいずれかによって提供できます。トランスポート セキュリティ モードは、トランスポート層の機構 (HTTPS など) によって、機密性、整合性、および認証を提供することを示します。HTTPS のようなトランスポートを使用する場合、このモードには、パフォーマンスの面で効率的であることと、インターネットで普及しているため、十分に認識されているという利点があります。欠点は、この種類のセキュリティは通信パスの各ホップで個別に適用されるため、通信が "man-in-the-middle" 攻撃の影響を受けやすくなることです。

メッセージ資格情報付きトランスポート セキュリティ モード

このモードは、トランスポート層を使用してメッセージの機密性、認証、および整合性を提供します。各メッセージには、メッセージの受信側で必要とされる複数の資格情報 (クレーム) を含めることができます。

WCF クライアント

WCF クライアントは、サービス操作を (Visual Basic や Visual C# など、開発者が選択した .NET Framework プログラミング言語の) メソッドとして公開するクライアント アプリケーション構造体です。サービスをホストするアプリケーションも含め、すべてのアプリケーションが WCF クライアントをホストできます。したがって、他のサービスの WCF クライアントを含むサービスを作成できます。 ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用し、メタデータを公開する実行中のサービスでメタデータを指定することによって、WCF クライアントを自動的に生成できます。

WS-*

WCF に実装された一連の Web サービス (WS) 仕様 (WS-Security や WS-ReliableMessaging など) の略称です。