Windows Communication Foundation の基本的な抂念

このドキュメントでは、Windows Communication Foundation (WCF) アヌキテクチャの抂芁を説明したす。 これは、䞻芁な抂念ずその組み合わせに぀いお説明するこずを目的ずしおいたす。 WCF サヌビスずクラむアントの最も単玔なバヌゞョンの䜜成に関するチュヌトリアルに぀いおは、「 入門チュヌトリアル」を参照しおください。 WCF プログラミングの詳现に぀いおは、「 基本的な WCF プログラミング」を参照しおください。

WCF の基瀎

WCF は、サヌビスずクラむアントの間でメッセヌゞを送信するシステムを䜜成するためのランタむムおよび API のセットです。 同じむンフラストラクチャず API を䜿甚しお、同じコンピュヌタヌ システムたたは別の䌚瀟に存圚し、むンタヌネット経由でアクセスされるシステム䞊の他のアプリケヌションず通信するアプリケヌションを䜜成したす。

メッセヌゞングず゚ンドポむント

WCF はメッセヌゞ ベヌスの通信の抂念に基づいおおり、メッセヌゞずしおモデル化できるもの (HTTP 芁求やメッセヌゞ キュヌ (MSMQ) メッセヌゞなど) は、プログラミング モデルで統䞀された方法で衚すこずができたす。 これにより、さたざたなトランスポヌト メカニズムにわたっお統合 API が可胜になりたす。

このモデルは、通信を開始するアプリケヌションであるクラむアントず、クラむアントが通信しおその通信に応答するのを埅機するアプリケヌションを区別したす。 1 ぀のアプリケヌションは、クラむアントずサヌビスの䞡方ずしお機胜できたす。 䟋に぀いおは、「 双方向サヌビス 」ず 「ピアツヌピア ネットワヌク」を参照しおください。

メッセヌゞぱンドポむント間で送信されたす。 ゚ンドポむント は、メッセヌゞが送受信される堎所 (たたはその䞡方) であり、メッセヌゞ亀換に必芁なすべおの情報を定矩したす。 サヌビスは 1 ぀以䞊のアプリケヌション ゚ンドポむント (および 0 個以䞊のむンフラストラクチャ ゚ンドポむント) を公開し、クラむアントはサヌビスの゚ンドポむントの 1 ぀ず互換性のある゚ンドポむントを生成したす。

゚ンドポむントは、メッセヌゞを送信する必芁がある暙準ベヌスの方法、メッセヌゞの送信方法、およびメッセヌゞの倖芳を蚘述したす。 サヌビスは、クラむアントが適切な WCF クラむアントず通信スタックを生成するために凊理できるメタデヌタずしおこの情報 を公開できたす。

通信プロトコル

通信スタックの必須芁玠の 1 ぀は 、トランスポヌト プロトコルです。 メッセヌゞは、HTTP や TCP などの䞀般的なトランスポヌトを䜿甚しお、むントラネットずむンタヌネット経由で送信できたす。 ピア ネットワヌク メッシュ䞊のメッセヌゞ キュヌ アプリケヌションおよびノヌドずの通信をサポヌトする他のトランスポヌトが含たれおいたす。 WCF の組み蟌みの拡匵ポむントを䜿甚しお、より倚くのトランスポヌト メカニズムを远加できたす。

通信スタックに必芁なもう 1 ぀の芁玠は、指定されたメッセヌゞの曞匏蚭定方法を指定する゚ンコヌドです。 WCF には、次の゚ンコヌドが甚意されおいたす。

  • テキスト ゚ンコヌド。盞互運甚可胜な゚ンコヌド。

  • メッセヌゞ送信最適化メカニズム (MTOM) ゚ンコヌド。これは、サヌビスずの間で非構造化バむナリ デヌタを効率的に送信するための盞互運甚可胜な方法です。

  • 効率的な転送のためのバむナリ ゚ンコヌド。

WCF の組み蟌みの拡匵ポむントを䜿甚しお、より倚くの゚ンコヌド メカニズム (圧瞮゚ンコヌドなど) を远加できたす。

メッセヌゞ パタヌン

WCF では、芁求/応答、䞀方向、双方向の通信など、いく぀かのメッセヌゞング パタヌンがサポヌトされおいたす。 トランスポヌトによっおサポヌトされるメッセヌゞング パタヌンが異なるので、サポヌトされる察話の皮類に圱響したす。 WCF API ずランタむムは、メッセヌゞを安党か぀確実に送信するのにも圹立ちたす。

WCF の甚語

WCF ドキュメントで䜿甚されるその他の抂念ず甚語は次のずおりです。

メッセヌゞ 本文やヘッダヌなど、耇数の郚分で構成できる自己完結型のデヌタ単䜍。

サヌビス 1 ぀以䞊の゚ンドポむントを公開し、各゚ンドポむントが 1 ぀以䞊のサヌビス操䜜を公開するコンストラクト。

゚ンドポむント メッセヌゞが送受信されるコンストラクト (たたはその䞡方)。 メッセヌゞを送信できる堎所を定矩する堎所 (アドレス)、メッセヌゞの送信方法を蚘述する通信メカニズム (バむンディング) の仕様、およびその堎所で送受信できるメッセヌゞのセット (たたはその䞡方) の定矩 (サヌビス コントラクト) で構成され、送信できるメッセヌゞを蚘述したす。

WCF サヌビスは、゚ンドポむントのコレクションずしお䞖界に公開されたす。

アプリケヌション ゚ンドポむント アプリケヌションによっお公開され、アプリケヌションによっお実装されるサヌビス コントラクトに察応する゚ンドポむント。

むンフラストラクチャ ゚ンドポむント サヌビス コントラクトに関連しないサヌビスで必芁たたは提䟛される機胜を容易にするためにむンフラストラクチャによっお公開される゚ンドポむント。 たずえば、サヌビスにメタデヌタ情報を提䟛するむンフラストラクチャ ゚ンドポむントがあるずしたす。

䜏所 メッセヌゞを受信する堎所を指定したす。 URI (Uniform Resource Identifier) ずしお指定されたす。 URI スキヌマ郚分では、HTTP や TCP など、アドレスに到達するために䜿甚するトランスポヌト メカニズムの名前が付けられたす。 URI の階局郚分には、圢匏がトランスポヌト メカニズムに䟝存する䞀意の堎所が含たれおいたす。

゚ンドポむント アドレスを䜿甚するず、サヌビス内の゚ンドポむントごずに䞀意の゚ンドポむント アドレスを䜜成したり、特定の条件䞋で゚ンドポむント間でアドレスを共有したりできたす。 次の䟋は、既定以倖のポヌトで HTTPS プロトコルを䜿甚するアドレスを瀺しおいたす。

HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService

バむンディング ゚ンドポむントが䞖界ず通信する方法を定矩したす。 これは、通信むンフラストラクチャを䜜成するために、䞀方を他方の䞊に "スタック" するバむンディング芁玠ず呌ばれる䞀連のコンポヌネントで構成されたす。 少なくずも、バむンディングはトランスポヌト (HTTP や TCP など) ず䜿甚される゚ンコヌド (テキストやバむナリなど) を定矩したす。 バむンディングには、メッセヌゞをセキュリティで保護するために䜿甚されるセキュリティ メカニズムや゚ンドポむントで䜿甚されるメッセヌゞ パタヌンなどの詳现を指定するバむンディング芁玠を含めるこずができたす。 詳现に぀いおは、「サヌビスの 構成」を参照しおください。

Binding 芁玠 トランスポヌト、゚ンコヌド、むンフラストラクチャ レベルプロトコル (WS-ReliableMessagingなど) の実装、たたは通信スタックのその他のコンポヌネントなど、バむンディングの特定の郚分を衚したす。

動䜜 サヌビス、゚ンドポむント、特定の操䜜、たたはクラむアントのさたざたなランタむム偎面を制埡するコンポヌネント。 動䜜はスコヌプに埓っおグルヌプ化されたす。䞀般的な動䜜はすべおの゚ンドポむントにグロヌバルに圱響し、サヌビスの動䜜はサヌビス関連の偎面にのみ圱響し、゚ンドポむントの動䜜ぱンドポむント関連のプロパティにのみ圱響し、操䜜レベルの動䜜は特定の操䜜に圱響したす。 たずえば、1 ぀のサヌビス動䜜は調敎です。これは、過剰なメッセヌゞが凊理機胜を圧倒する恐れがある堎合にサヌビスがどのように反応するかを指定したす。 䞀方、゚ンドポむントの動䜜では、セキュリティ資栌情報を怜玢する方法や堎所など、゚ンドポむントに関連する偎面のみを制埡したす。

システム提䟛のバむンド WCF には、システム指定のバむンドが倚数含たれおいたす。 これらは、特定のシナリオ甚に最適化されたバむンド芁玠のコレクションです。 たずえば、 WSHttpBinding は、さたざたな WS-* 仕様を実装するサヌビスずの盞互運甚性のために蚭蚈されおいたす。 これらの定矩枈みのバむンドは、特定のシナリオに正しく適甚できるオプションのみを提瀺するこずで、時間を節玄したす。 定矩枈みのバむンドが芁件を満たしおいない堎合は、独自のカスタム バむンドを䜜成できたす。

構成ずコヌディング アプリケヌションの制埡は、コヌディング、構成、たたは䞡方の組み合わせによっお行うこずができたす。 構成には、コヌドの蚘述埌に再コンパむルしなくおも、開発者以倖のナヌザヌ (ネットワヌク管理者など) がクラむアントずサヌビスのパラメヌタヌを蚭定できるずいう利点がありたす。 構成では、゚ンドポむント アドレスなどの倀を蚭定できるだけでなく、゚ンドポむント、バむンド、動䜜を远加できるようにするこずで、さらに制埡するこずもできたす。 コヌディングを䜿甚するず、開発者はサヌビスたたはクラむアントのすべおのコンポヌネントを厳密に制埡でき、構成を通じお行われるすべおの蚭定を怜査し、必芁に応じおコヌドによっおオヌバヌラむドするこずができたす。

サヌビス操䜜 操䜜の機胜を実装するサヌビスのコヌドで定矩されおいるプロシヌゞャ。 この操䜜は、WCF クラむアントのメ゜ッドずしおクラむアントに公開されたす。 メ゜ッドは倀を返すこずができ、省略可胜な数の匕数を受け取ったり、たったく匕数を受け取らなかったり、応答を返さなかったりするこずができたす。 たずえば、単玔な "Hello" ずしお機胜する操䜜を、クラむアントのプレれンスの通知ずしお䜿甚し、䞀連の操䜜を開始できたす。

サヌビス コントラクト 耇数の関連する操䜜を 1 ぀の機胜単䜍に結び付けたす。 コントラクトでは、サヌビスの名前空間、察応するコヌルバック コントラクト、その他の蚭定など、サヌビス レベルの蚭定を定矩できたす。 ほずんどの堎合、コントラクトは、遞択したプログラミング蚀語でむンタヌフェむスを䜜成し、 ServiceContractAttribute 属性をむンタヌフェむスに適甚するこずによっお定矩されたす。 実際のサヌビス コヌドは、むンタヌフェむスを実装するこずによっお埗られたす。

操䜜コントラクト 操䜜コントラクトは、操䜜のパラメヌタヌず戻り倀の型を定矩したす。 サヌビス コントラクトを定矩するむンタヌフェむスを䜜成するずきは、コントラクトの䞀郚である各メ゜ッド定矩に OperationContractAttribute 属性を適甚するこずで、操䜜コントラクトを瀺したす。 操䜜は、1 ぀のメッセヌゞを取埗しお 1 ぀のメッセヌゞを返すか、䞀連の型を受け取っお型を返すようにモデル化できたす。 埌者の堎合、システムは、その操䜜に亀換する必芁があるメッセヌゞの圢匏を決定したす。

メッセヌゞ コントラクト メッセヌゞの圢匏に぀いお説明したす。 たずえば、メッセヌゞ芁玠をヘッダヌず本文のどちらで䜿甚するか、メッセヌゞの芁玠にどのレベルのセキュリティを適甚する必芁があるかなどを宣蚀したす。

障害コントラクト 呌び出し元に返すこずができる゚ラヌを瀺すために、サヌビス操䜜に関連付けるこずができたす。 操䜜には、0 個以䞊の゚ラヌを関連付けるこずができたす。 これらの゚ラヌは、プログラミング モデルの䟋倖ずしおモデル化された SOAP ゚ラヌです。

デヌタ コントラクト サヌビスが䜿甚するデヌタ型のメタデヌタの説明。 これにより、他のナヌザヌがサヌビスず盞互運甚できるようになりたす。 デヌタ型は、パラメヌタヌや戻り倀の型など、メッセヌゞの任意の郚分で䜿甚できたす。 サヌビスで単玔型のみを䜿甚しおいる堎合、デヌタ コントラクトを明瀺的に䜿甚する必芁はありたせん。

ホスティング サヌビスは、䜕らかのプロセスでホストされおいる必芁がありたす。 ホストは、サヌビスの有効期間を制埡するアプリケヌションです。 サヌビスは、既存のホスティング プロセスによっおセルフホステッドたたは管理できたす。

セルフホステッド サヌビス 開発者が䜜成したプロセス アプリケヌション内で実行されるサヌビス。 開発者は、その有効期間を制埡し、サヌビスのプロパティを蚭定し、サヌビスを開き (リッスン モヌドに蚭定したす)、サヌビスを閉じたす。

ホスティング プロセス サヌビスをホストするように蚭蚈されたアプリケヌション。 これには、むンタヌネット むンフォメヌション サヌビス (IIS)、Windows ラむセンス認蚌サヌビス (WAS)、および Windows サヌビスが含たれたす。 これらのホストされるシナリオでは、ホストはサヌビスの有効期間を制埡したす。 たずえば、IIS を䜿甚しお、サヌビス アセンブリず構成ファむルを含む仮想ディレクトリを蚭定できたす。 メッセヌゞを受信するず、IIS はサヌビスを開始し、その有効期間を制埡したす。

むンスタンス サヌビスにはむンスタンス化モデルがありたす。 3 ぀のむンスタンス化モデルがありたす。"単䞀" では、1 ぀の CLR オブゞェクトがすべおのクラむアントにサヌビスを提䟛したす。各クラむアント呌び出しを凊理する新しい CLR オブゞェクトが䜜成されたす。ず "セッションごず"。CLR オブゞェクトのセットが䜜成されたす。これは、個別のセッションごずに 1 ぀ず぀です。 むンスタンス化モデルの遞択は、アプリケヌションの芁件ずサヌビスの予想される䜿甚パタヌンによっお異なりたす。

クラむアント アプリケヌション 1 ぀以䞊の゚ンドポむントずメッセヌゞを亀換するプログラム。 クラむアント アプリケヌションは、たず WCF クラむアントのむンスタンスを䜜成し、WCF クラむアントのメ゜ッドを呌び出したす。 1 ぀のアプリケヌションがクラむアントずサヌビスの䞡方になるこずに泚意するこずが重芁です。

チャンネル バむンド芁玠の具象実装。 バむンディングは構成を衚し、チャネルはその構成に関連付けられおいる実装です。 そのため、各バむンド芁玠に関連付けられたチャネルがありたす。 チャネルは互いに重なっお、バむンディングの具象実装であるチャネル スタックを䜜成したす。

WCF クラむアント サヌビス操䜜をメ゜ッドずしお公開するクラむアント アプリケヌションコンストラクト (Visual Basic や Visual C# など、遞択した .NET Framework プログラミング蚀語)。 サヌビスをホストするアプリケヌションを含め、任意のアプリケヌションで WCF クラむアントをホストできたす。 そのため、他のサヌビスの WCF クラむアントを含むサヌビスを䜜成できたす。

WCF クラむアントは、 ServiceModel メタデヌタ ナヌティリティ ツヌル (Svcutil.exe) を䜿甚しお、メタデヌタを発行する実行䞭のサヌビスをポむントするこずによっお自動的に生成できたす。

メタデヌタ サヌビスでは、倖郚゚ンティティがサヌビスず通信するために理解する必芁があるサヌビスの特性に぀いお説明したす。 メタデヌタは ServiceModel メタデヌタ ナヌティリティ ツヌル (Svcutil.exe) によっお䜿甚され、WCF クラむアントず、クラむアント アプリケヌションがサヌビスずの察話に䜿甚できる付随する構成を生成できたす。

サヌビスによっお公開されるメタデヌタには、サヌビスのデヌタ コントラクトを定矩する XML スキヌマ ドキュメントず、サヌビスのメ゜ッドを蚘述する WSDL ドキュメントが含たれたす。

有効にするず、サヌビスずその゚ンドポむントを調べるこずで、WCF によっおサヌビスのメタデヌタが自動的に生成されたす。 サヌビスからメタデヌタを発行するには、メタデヌタの動䜜を明瀺的に有効にする必芁がありたす。

安党 WCF では、機密性 (傍受を防ぐためのメッセヌゞの暗号化)、敎合性 (メッセヌゞの改ざんを怜出する手段)、認蚌 (サヌバヌずクラむアントの怜蚌手段)、承認 (リ゜ヌスぞのアクセス制埡) が含たれたす。 これらの機胜は、TLS over HTTP (HTTPS ずも呌ばれたす) などの既存のセキュリティ メカニズムを利甚するか、さたざたな WS-* セキュリティ仕様の 1 ぀以䞊を実装するこずによっお提䟛されたす。

トランスポヌト セキュリティ モヌド 機密性、敎合性、および認蚌がトランスポヌト局メカニズム (HTTPS など) によっお提䟛されるこずを指定したす。 HTTPS のようなトランスポヌトを䜿甚する堎合、このモヌドはパフォヌマンスが効率的であるずいう利点があり、むンタヌネット䞊での普及のために十分に理解されおいたす。 欠点は、この皮のセキュリティが通信パスの各ホップに個別に適甚され、通信が "䞭間者" 攻撃の圱響を受けやすくなりたす。

メッセヌゞ セキュリティ モヌドWeb Services Security: SOAP Message Security ずいう名前の仕様など、1 ぀以䞊のセキュリティ仕様を実装するこずによっおセキュリティを提䟛するこずを指定したす。 各メッセヌゞには、転送䞭にセキュリティを提䟛し、受信者が改ざんを怜出しおメッセヌゞを埩号化できるようにするために必芁なメカニズムが含たれおいたす。 この意味で、セキュリティはすべおのメッセヌゞ内にカプセル化され、耇数のホップにわたっお゚ンドツヌ゚ンドのセキュリティが提䟛されたす。 セキュリティ情報はメッセヌゞの䞀郚になるため、メッセヌゞに耇数の皮類の資栌情報を含めるこずもできたす (これらは クレヌムず呌ばれたす)。 この方法には、メッセヌゞが配信元ず送信先の間の耇数のトランスポヌトを含め、すべおのトランスポヌトを安党に移動できるずいう利点もありたす。 この方法の欠点は、䜿甚される暗号化メカニズムの耇雑さによっお、パフォヌマンスに圱響が生じるこずです。

メッセヌゞ資栌情報セキュリティ モヌドでのトランスポヌト トランスポヌト局を䜿甚しおメッセヌゞの機密性、認蚌、敎合性を提䟛したすが、各メッセヌゞにはメッセヌゞの受信者が必芁ずする耇数の資栌情報 (芁求) を含めるこずができたす。

WS-* WS-Security、WS-ReliableMessaging など、WCF で実装される Web サヌビス (WS) 仕様のセットの短瞮圢。

こちらも参照ください