WCF Web HTTP プログラミング オブジェクト モデル
WCF WEB HTTP プログラミング モデルを使用すると、開発者は、SOAP を必要とせずに、基本的な HTTP 要求を通じて Windows Communication Foundation (WCF) Web サービスを公開できます。 WCF WEB HTTP プログラミング モデルは、既存の WCF 拡張モデルに基づいて構築されます。 Web HTTP プログラミング モデルでは、次のクラスが定義されます。
プログラミング モデル:
チャネルおよびディスパッチャー インフラストラクチャ
ユーティリティ クラスと機能拡張ポイント
AspNetCacheProfileAttribute
AspNetCacheProfileAttribute は、サービス操作に適用された場合に、構成ファイル内の ASP.NET 出力キャッシュ プロファイルを示します。この構成ファイルを使用して ASP .NET 出力キャッシュに操作の応答がキャッシュされます。 このプロパティが受け取るパラメーターは 1 つ (構成ファイルでキャッシュ設定を指定するキャッシュ プロファイル名) だけです。
WebGetAttribute
WebGetAttribute 属性は、サービス操作を HTTP GET 要求に応答する操作としてマークするために使用されます。 メタデータを操作の説明に追加する受信操作の動作です (IOperationBehavior メソッドは何の処理も行いません)。 このメタデータを操作の説明で検索する動作 (特に WebGetAttribute) がサービスの動作コレクションに追加されていない場合は、WebHttpBehavior を適用しても機能しません。 WebGetAttribute 属性には、次の表に示すパラメーターをオプションで指定できます。
パラメーター | 説明 |
---|---|
BodyStyle |
属性が適用されているサービス操作との間で送受信される要求と応答をラップするかどうかを制御します。 |
RequestFormat |
要求メッセージの書式設定方法を制御します。 |
ResponseFormat |
応答メッセージの書式設定方法を制御します。 |
UriTemplate |
属性が適用されているサービス操作にマップされた HTTP 要求を制御する URI テンプレートを指定します。 |
WebHttpBinding
WebHttpBinding クラスは、WebMessageEncodingBindingElement を使用して、XML、JSON、および生のバイナリ データのサポートを組み込みます。 これは、HttpsTransportBindingElement、HttpTransportBindingElement、および WebHttpSecurity オブジェクトから構成されています。 WebHttpBinding は、WebHttpBehavior と組み合わせて使用するようにデザインされています。
WebInvokeAttribute
WebInvokeAttribute 属性は WebGetAttribute 属性によく似ていますが、サービス操作を GET 以外の HTTP 要求に応答する操作としてマークするために使用されます。 メタデータを操作の説明に追加する受信操作の動作です (IOperationBehavior メソッドは何の処理も行いません)。 このメタデータを操作の説明で検索する動作 (特に WebInvokeAttribute) がサービスの動作コレクションに追加されていない場合は、WebHttpBehavior を適用しても機能しません。
WebInvokeAttribute 属性には、次の表に示すパラメーターをオプションで指定できます。
パラメーター | 説明 |
---|---|
BodyStyle |
属性が適用されているサービス操作との間で送受信される要求と応答をラップするかどうかを制御します。 |
Method |
サービス操作がマップされる HTTP メソッドを指定します。 |
RequestFormat |
要求メッセージの書式設定方法を制御します。 |
ResponseFormat |
応答メッセージの書式設定方法を制御します。 |
UriTemplate |
属性が適用されているサービス操作にマップされた GET 要求を制御する URI テンプレートを指定します。 |
UriTemplate
UriTemplate クラスでは、構造が似ている URI のセットを定義できます。 テンプレートは、パスとクエリの 2 つの部分から構成されています。 パスは、スラッシュ (/) で区切られた一連のセグメントから構成されています。 各セグメントには、リテラル値、変数値 (中かっこ [{ }] 内に記述。必ず 1 つのセグメントと一致するよう制約)、またはワイルドカード (アスタリスク [*] で記述。"残りのパス" に一致する) を指定することができます。ワイルドカードは、パスの最後に指定する必要があります。 クエリ式は、すべて省略することができます。 存在する場合、クエリ式は順序なしの一連の名前/値ペアを指定します。 クエリ式の要素には、リテラル ペア (?x=2) または変数ペア (?x={value}) を指定できます。 対になっていない値は使用できません。 UriTemplate は、特定の URI や URI のグループをサービス操作にマップするために、WCF WEB HTTP プログラミング モデルによって内部的に使用されます。
UriTemplateTable
UriTemplateTable クラスは、開発者が選択したオブジェクトにバインドされた UriTemplate オブジェクトの結合セットを表します。 これにより、セット内のテンプレートと候補 URI (Uniform Resource Identifier) を照合し、一致したテンプレートに関連付けられているデータを取得することができます。 UriTemplateTable は、特定の URI や URI のグループをサービス操作にマップするために、WCF WEB HTTP プログラミング モデルによって内部的に使用されます。
WebServiceHost
WebServiceHost は ServiceHost を拡張するため、SOAP 以外の Web スタイル サービスを容易にホストできます。 WebServiceHost では、サービスの説明にエンドポイントが見つからない場合、サービスのベース アドレスに既定のエンドポイントを自動的に作成します。 既定の HTTP エンドポイントを作成するときに、WebServiceHost は、HTTP ヘルプ ページと Web サービス記述言語 (WSDL) GET 機能を無効にして、メタデータ エンドポイントが既定の HTTP エンドポイントに干渉しないようにします。 また、WebServiceHost は、WebHttpBinding を使用するすべてのエンドポイントに必要な WebHttpBehavior がアタッチされるようにもします。 最後に、WebServiceHost は、エンドポイントのバインディングを、安全な仮想ディレクトリで使用するときに、関連付けられたインターネット インフォメーション サービス (IIS) のセキュリティ設定と連携して動作するよう自動的に構成します。
WebServiceHostFactory
WebServiceHostFactory クラスは、サービスがインターネット インフォメーション サービス (IIS) または Windows プロセス アクティブ化サービス (WAS) でホストされている場合に、WebServiceHost を動的に作成するために使用されます。 ホスト アプリケーションが WebServiceHost をインスタンス化する自己ホスト型サービスとは異なり、IIS または WAS でホストされているサービスは、このクラスを使用してサービスの WebServiceHost を作成します。 CreateServiceHost(Type, Uri[]) メソッドは、サービスの受信要求の受信時に呼び出されます。
WebHttpBehavior
WebHttpBehavior クラスは、必要なフォーマッタ、操作セレクターなど、サービス モデル レイヤーで Web スタイル サービスをサポートするために必要な内容を提供します。 このパラメーターは (WebHttpBinding と共に使用される) エンドポイントの動作として実装され、これにより、フォーマッタと操作セレクターを各エンドポイントに指定できるようになり、さらに、同じサービス実装で SOAP エンドポイントと POX エンドポイントの両方を公開できるようになります。
WebHttpBehavior の拡張
WebHttpBehavior は、仮想メソッド GetOperationSelector(ServiceEndpoint)、GetReplyClientFormatter(OperationDescription, ServiceEndpoint)、GetRequestClientFormatter(OperationDescription, ServiceEndpoint)、GetReplyDispatchFormatter(OperationDescription, ServiceEndpoint)、および GetRequestDispatchFormatter(OperationDescription, ServiceEndpoint) を使用して拡張できます。 開発者は、WebHttpBehavior から派生クラスを作成し、そのメソッドをオーバーライドして既定の動作をカスタマイズすることができます。
WebScriptEnablingBehavior は、WebHttpBehavior 拡張の一例です。 WebScriptEnablingBehavior を使用すると、Windows Communication Foundation (WCF) エンドポイントにより、ブラウザーベースの ASP.NET AJAX クライアントから HTTP 要求を受信できるようになります。 HTTP POST を使用する AJAX サービスは、この拡張ポイントを使用した例です。
警告
WebScriptEnablingBehavior を使用する場合、UriTemplate は、WebGetAttribute または WebInvokeAttribute 属性内でサポートされません。
WebHttpDispatchOperationSelector
WebHttpDispatchOperationSelector クラスは、UriTemplate クラスおよび UriTemplateTable クラスを使用して、サービス操作に対して呼び出しをディスパッチします。
互換性
WCF WEB HTTP プログラミング モデルでは、SOAP ベースのメッセージを使用しないため、WS-* プロトコルをサポートしていません。 ただし、SOAP を使用するエンドポイントと SOAP を使用しないその他のエンドポイントの 2 つの異なるエンドポイントを使用して、同じコントラクトを公開できます。 例については、「方法: コントラクトを SOAP クライアントおよび Web クライアントに公開する」を参照してください。
セキュリティ
WCF WEB HTTP プログラミング モデルでは WS-* プロトコルがサポートされないため、WCF WEB HTTP プログラミング モデルで構築された Web サービスを保護するには、SSL を使用してサービスを公開するしかありません。 IIS 7.0 での SSL の設定の詳細については、IIS での SSL の実装方法に関するページを参照してください。