WCF Web HTTP プログラミング モデルの概要

Windows Communication Foundation (WCF) WEB HTTP プログラミング モデルは WCF での WEB HTTP サービスの構築に必要な基本的な要素を提供します。WCF WEB HTTP サービスは、Web ブラウザーも含めて、最大限の幅広いクライアントからアクセスできるように設計されており、次の固有の要件があります。

  • URI および URI 処理 URI は、WEB HTTP サービスのデザインで中心的な役割を果たします。WCF WEB HTTP プログラミング モデルでは、UriTemplate クラスおよび UriTemplateTable クラスを使用して、URI 処理機能を提供します。

  • GET 操作と POST 操作のサポート WEB HTTP サービスは、データ変更やリモート呼び出しに必要なさまざまな起動用の動詞に加えて、データ取得用に GET 動詞を使用します。WCF WEB HTTP プログラミング モデルは、WebGetAttribute および WebInvokeAttribute を使用して、サービス操作を GET 動詞や PUT、POST、DELETE などの他の HTTP 動詞に関連付けます。

  • 複数のデータ形式 Web スタイル サービスは SOAP メッセージ以外にもさまざまな種類のデータを処理します。WCF WEB HTTP プログラミング モデルは、WebHttpBinding および WebHttpBehavior を使用して、XML ドキュメント、JSON データ オブジェクト、バイナリ コンテンツのストリーム (イメージ、ビデオ ファイル、プレーンテキスト) など、さまざまなデータ形式をサポートします。

WCF WEB HTTP プログラミング モデルは WCF の扱う範囲を拡大し、WEB HTTP サービス、AJAX および JSON サービス、配信 (ATOM および RSS) フィードを使用する Web スタイルのシナリオも対象とします。AJAX および JSON サービス詳細情報、「AJAX の統合と JSON のサポート」を参照してください。配信詳細情報、「WCF 配信の概要」を参照してください。

WEB HTTP サービスから返されるデータの種類に追加の制限はありません。WEB HTTP サービス操作からは任意のシリアル化可能な型を返すことができます。WEB HTTP サービス操作は Web ブラウザーによって呼び出すことができるため、URL に指定できるデータ型に制限があります。既定でサポートされる型の詳細については、以下の「UriTemplate クエリ文字列パラメーターと URL」を参照してください。既定の動作は、URL で指定されたパラメーターから実際のパラメーター型への変換方法を指定する独自の T:System.ServiceModel.Dispatcher.QueryStringConverter 実装を提供することで変更できます。詳細については、次のトピックを参照してください。 QueryStringConverter

Bb412172.Caution(ja-jp,VS.100).gif注意 :
WCF WEB HTTP プログラミング モデルで記述されたサービスでは、SOAP メッセージは使用されません。SOAP が使用されないため、WCF によって提供されるセキュリティ機能を使用することはできません。ただし、HTTPS でサービスをホストすることによってトランスポート ベースのセキュリティを使用できます。WCF セキュリティ詳細情報、「セキュリティの概要」を参照してください。

Bb412172.Warning(ja-jp,VS.100).gif 注意 :
IIS の WebDAV 拡張をインストールすると、WebDAV 拡張がすべての PUT 要求を処理しようとしたときに Web HTTP サービスが HTTP 405 エラーを返すことがあります。この問題を解決するには、WebDAV 拡張をアンインストールするか、Web サイトの WebDAV 拡張を無効にします。詳細については、次のトピックを参照してください。 IIS および WebDav

UriTemplate および UriTemplateTable を使用した URI 処理

URI テンプレートには、構造的に類似する URI の大規模なセットを効率的に表現するための構文が備わっています。たとえば、テンプレート a/{segment}/c は、中間のセグメントの値を問わず、"a" で始まり "c" で終了する 3 つのセグメントから成る URI のセットを表しています。

このテンプレートによって、次のような URI が記述されます。

  • a/x/c

  • a/y/c

  • a/z/c

  • など。

このテンプレートでは、中かっこによる表記 ("{segment}") で、リテラル値ではなく、変数のセグメントを示しています。

.NET Framework は UriTemplate という URI テンプレートでの作業に使用できる新しい API を提供します。UriTemplates を使用すると、次のことができます。

  • 一連のパラメーターで Bind メソッドの 1 つを呼び出し、テンプレートに適合する完全にクローズである URI を生成できます。つまり、URI テンプレート内の変数がすべて、実際の値に置き換えられます。

  • 候補の URI を使用して Match() を呼び出すことができます。このメソッドは、テンプレートを使用して候補の URI を構成要素に分解し、テンプレート内の変数に従って分類される URI のさまざまな要素を収めたディクショナリを返します。

  • Bind() と Match() は逆のもので、Match( Bind( x ) ) を呼び出し、最初と同じ環境に戻ることができます。

包含されたテンプレートを個別に扱うことができるデータ構造内の一連の UriTemplate オブジェクトを追跡することが必要になる場合がよくあります (特に、URI に基づいて要求をサービス操作にディスパッチすることが必要なサーバー上)。UriTemplateTable は、URI テンプレートのセットを表し、テンプレート セットと候補の URI が与えられると、最適の組み合わせを選択します。これは、特定のネットワーク スタックと結び付いていないので (WCF を含む)、必要な場合はいつでも使用できます。

WCF サービス モデルは、UriTemplate および UriTemplateTable を使用して、UriTemplate によって記述された URI セットにサービス操作を関連付けます。サービス操作は、WebGetAttribute または WebInvokeAttribute によって UriTemplate に関連付けられます。UriTemplate および UriTemplateTable詳細情報、「UriTemplate と UriTemplateTable」を参照してください。

WebGet および WebInvoke 属性

WCF WEB HTTP サービスは、さまざまな呼び出し用の動詞 (HTTP POST、PUT、DELETE など) に加えて、データ取得のための動詞 (HTTP GET など) を使用します。WCF WEB HTTP プログラミング モデルでは、サービスの開発者は WebGetAttributeWebInvokeAttribute を使用して、URI テンプレートと、各自のサービス操作に関連付けられた動詞を共に制御できます。WebGetAttribute および WebInvokeAttribute を使用すると、個々の操作を URI と、それらの URI に関連付けられている HTTP メソッドにバインドする方法を制御できます。たとえば、次のコードでは、WebGetAttribute および WebInvokeAttribute を追加します。

[ServiceContract]
interface ICustomer
{
  //"View It"
  
  [WebGet]
  Customer GetCustomer():
  
  //"Do It"
    [WebInvoke]
  Customer UpdateCustomerName( string id, 
                               string newName );
}

上記のコードを使用すると、次の HTTP 要求を行うことができます。

GET /GetCustomer

POST /UpdateCustomerName

WebInvokeAttribute は、既定で POST に設定されていますが、他の動詞にも使用できます。

[ServiceContract]
interface ICustomer
{
  //"View It" -> HTTP GET
    [WebGet( UriTemplate="customers/{id}" )]
  Customer GetCustomer( string id ):
  
  //"Do It“ -> HTTP PUT
  [WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
  Customer UpdateCustomer( string id, Customer newCustomer );
}

WCF WEB HTTP プログラミング モデルを使用する WCF サービスのサンプル全体を確認するには、「方法 : 基本的な WCF Web HTTP サービスを作成する」を参照してください。

UriTemplate クエリ文字列パラメーターと URL

サービス操作に関連付けられた URL を入力することによって、Web ブラウザーから Web スタイルのサービスを呼び出すことができます。このようなサービス操作は、文字列形式で指定する必要があるクエリ文字列パラメーターを URL 内で受け取ることができます。次の表に、URL 内で渡すことができる型と、使用される形式を示します。

形式

Byte

0 - 255

SByte

-128 - 127

Int16

-32768 - 32767

Int32

-2,147,483,648 - 2,147,483,647

Int64

-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807

UInt16

0 - 65535

UInt32

0 - 4,294,967,295

UInt64

0 - 18,446,744,073,709,551,615

Single

-3.402823e38 - 3.402823e38 (指数表記は要求されない)

Double

-1.79769313486232e308 - 1.79769313486232e308 (指数表記は要求されない)

Char

任意の 1 文字

Decimal

標準表記による任意の小数 (指数なし)

Boolean

True または False (大文字と小文字は区別されません)

String

任意の文字列 (null 文字列はサポートされず、エスケープは行われない)

DateTime

MM/DD/YYYY

MM/DD/YYYY HH:MM:SS [AM|PM]

月 日 年

月 日 年 HH:MM:SS [AM|PM]

TimeSpan

DD.HH:MM:SS

DD = 日、HH = 時、MM = 分、SS = 秒

Guid

GUID。たとえば、次のようになります。

936DA01F-9ABD-4d9d-80C7-02AF85C822A8

DateTimeOffset

MM/DD/YYYY HH:MM:SS MM:SS

DD = 日、HH = 時、MM = 分、SS = 秒

列挙体

列挙値。たとえば、次のコードのように列挙体を定義します。

public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

クエリ文字列に、任意の列挙値 (またはそれぞれに対応する integer 値) を指定できます。

型と文字列表現を双方向に変換できる TypeConverterAttribute を持つ型。

型コンバーターによって異なります。

形式と WCF WEB HTTP プログラミング モデル

WCF WEB HTTP プログラミング モデルには、さまざまなデータ形式を扱うための新機能が備わっています。WebHttpBinding は、バインディング層で次のさまざまな種類のデータを読み書きできます。

  • XML

  • JSON

  • 不透明なバイナリ ストリーム

つまり、WCF WEB HTTP プログラミング モデルではあらゆる種類のデータを処理できますが、Stream に対してプログラミングすることもできます。

.NET Framework 3.5 は、配信フィード (ATOM および RSS) だけでなく、JSON データ (AJAX) にも対応しています。このような機能詳細情報、「WCF Web HTTP 形式」、「WCF 配信の概要」、および「AJAX の統合と JSON のサポート」を参照してください。

WCF WEB HTTP プログラミング モデルとセキュリティ

WCF WEB HTTP プログラミング モデルでは WS-* プロトコルがサポートされないため、WCF WEB HTTP サービスを保護するには、SSL を使用して HTTPS 全体でサービスを公開するしかありません。IIS 7.0 を使用した SSL の設定詳細情報、「IIS での SSL の実装方法」を参照してください。

WCF WEB HTTP プログラミング モデルのトラブルシューティング

ChannelFactory を使用してチャネルを作成するために WCF WEB HTTP サービスを呼び出すと、異なる EndpointAddressChannelFactory に渡されるとしても、WebHttpBehavior は構成ファイルに設定されている EndpointAddress を使用します。

参照

概念

WCF Web HTTP プログラミング オブジェクト モデル

その他のリソース

WCF 配信
WCF Web HTTP プログラミング モデル