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

Web プログラミング モデルは Windows Communication Foundation (WCF) での Web スタイル サービスの構築に必要な基本的なフレームワーク要素を提供します。Web スタイル サービスは最大限の幅広いクライアント (追加のクライアント フレームワークを持たない Web ブラウザも含めて) からアクセスできるように設計されています。

  • URI および URI 処理。URI は、Web スタイル サービスのデザインで中心的な役割を果たします。WCF Web プログラミング モデルでは、UriTemplate クラスおよび UriTemplateTable クラスを使用して、URI 処理機能を提供します。
  • GET 操作と POST 操作のサポート。Web スタイル サービスは、データ変更やリモート呼び出しに必要なさまざまな起動用の動詞に加えて、データ取得用に GET 動詞を使用します。Web プログラミング モデルは、WebGetAttribute および WebInvokeAttribute を使用して、サービス操作を GET 動詞および POST 動詞に関連付けます。
  • 複数のデータ形式。Web スタイル サービスは SOAP メッセージ以外にもさまざまな種類のデータを処理します。Web プログラミング モデルは、WebHttpBinding および WebHttpBehavior を使用して、XML ドキュメント、JSON データ オブジェクト、バイナリ コンテンツのストリーム (イメージ、ビデオ ファイル、プレーンテキスト) など、さまざまなデータ形式をサポートします。

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

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 3.5 は 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 に関連付けられます。

サービス操作のパラメータと 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 を持つ型。

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

WebGet および WebInvoke

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

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

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

GET /GetCustomer

POST /UpdateCustomerName

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

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

形式と Web プログラミング モデル

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

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

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

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

関連項目

概念

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

その他の技術情報

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