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

Windows Communication Foundation (WCF) WEB HTTP プログラミング モデルでは、wcf WEB HTTP サービスを構築するために必要な基本的な要素を提供します。The Windows Communication Foundation (WCF) WEB HTTP programming model provides the basic elements required to build WEB HTTP services with WCF. WCF WEB HTTP サービスは、最も広範な Web ブラウザーも含めて、クライアントがアクセスするよう設計されていて、次の固有の要件があります。WCF WEB HTTP services are designed to be accessed by the widest range of possible clients, including Web browsers and have the following unique requirements:

  • Uri および URI 処理Uri は、WEB HTTP サービスの設計の中心的な役割を再生します。URIs and URI Processing URIs play a central role in the design of WEB HTTP services. WCF WEB HTTP プログラミング モデルの使用、UriTemplateUriTemplateTableURI 処理機能を提供するクラス。The WCF WEB HTTP programming model uses the UriTemplate and UriTemplateTable classes to provide URI processing capabilities.

  • GET と POST 操作に対するサポートWEB HTTP サービスにより起動データ変更やリモート呼び出し用の動詞の GET 動詞のさまざまなだけでなく、データの取得に使用します。Support for GET and POST operations WEB HTTP services make use of the GET verb for data retrieval, in addition to various invoke verbs for data modification and remote invocation. WCF WEB HTTP プログラミング モデルの使用、WebGetAttributeWebInvokeAttributePOST、GET と PUT の場合と同様に他の HTTP 動詞の両方のサービス操作に関連付けるを削除します。The WCF WEB HTTP programming model uses the WebGetAttribute and WebInvokeAttribute to associate service operations with both GET and other HTTP verbs like PUT, POST, and DELETE.

  • 複数のデータ形式Web スタイルのサービスがさまざまな種類のデータだけでなく、SOAP メッセージを処理します。Multiple data formats Web-style services process many kinds of data in addition to SOAP messages. WCF WEB HTTP プログラミング モデルの使用、WebHttpBindingWebHttpBehaviorXML ドキュメント、JSON データ オブジェクト、およびイメージ、ビデオ ファイル、またはプレーン テキストなどのバイナリ コンテンツのストリームを含む多くの異なるデータ形式をサポートします。The WCF WEB HTTP programming model uses the WebHttpBinding and WebHttpBehavior to support many different data formats including XML documents, JSON data object, and streams of binary content such as images, video files, or plain text.

WCF WEB HTTP プログラミング モデルでは、wcf WEB HTTP サービス、AJAX および JSON サービス、および配信 (ATOM および RSS) フィードを含む Web スタイルのシナリオをカバーする範囲を拡大します。The WCF WEB HTTP programming model extends the reach of WCF to cover Web-style scenarios that include WEB HTTP services, AJAX and JSON services, and Syndication (ATOM/RSS) feeds. AJAX および JSON サービスに関する詳細については、次を参照してください。 AJAX の統合と JSON サポートです。For more information about AJAX and JSON services, see AJAX Integration and JSON Support. 配信の詳細については、次を参照してください。 WCF 配信の概要です。For more information about Syndication, see WCF Syndication Overview.

WEB HTTP サービスから返されるデータの種類に追加の制限はありません。There are no extra restrictions on the types of data that can be returned from a WEB HTTP service. WEB HTTP サービス操作からは任意のシリアル化可能な型を返すことができます。Any serializable type can be returned from an WEB HTTP service operation. WEB HTTP サービス操作は Web ブラウザーによって呼び出すことができるため、URL に指定できるデータ型に制限があります。Because WEB HTTP service operations can be invoke by a web browser there is a limitation on what data types can be specified in a URL. 既定でサポートされる種類の詳細については、次を参照してください。、 UriTemplate クエリ文字列パラメーターと Url以下のセクションです。For more information on what types are supported by default see the UriTemplate Query String Parameters and URLs section below. 既定の動作は、URL で指定されたパラメーターから実際のパラメーター型への変換方法を指定する独自の T:System.ServiceModel.Dispatcher.QueryStringConverter 実装を提供することで変更できます。The default behavior can be changed by providing your own T:System.ServiceModel.Dispatcher.QueryStringConverter implementation which specifies how to convert the parameters specified in a URL to the actual parameter type. 詳細については、「QueryStringConverter」を参照してください。For more information, see QueryStringConverter

注意事項

WCF WEB HTTP プログラミング モデルで記述されたサービスでは、SOAP メッセージは使用しないでください。Services written with the WCF WEB HTTP programming model do not use SOAP messages. SOAP が使用されないため、WCF に用意されたセキュリティ機能を使用することはできません。Because SOAP is not used, the security features provided by WCF cannot be used. ただし、HTTPS でサービスをホストすることによってトランスポート ベースのセキュリティを使用できます。You can, however use transport-based security by hosting your service with HTTPS. WCF セキュリティの詳細については、次を参照してくださいセキュリティの概要。For more information about WCF security, see Security Overview

警告

IIS の WebDAV 拡張をインストールすると、WebDAV 拡張がすべての PUT 要求を処理しようとしたときに Web HTTP サービスが HTTP 405 エラーを返すことがあります。Installing the WebDAV extension for IIS can cause Web HTTP services to return an HTTP 405 error as the WebDAV extension attempts to handle all PUT requests. この問題を解決するには、WebDAV 拡張をアンインストールするか、Web サイトの WebDAV 拡張を無効にします。To work around this issue you can uninstall the WebDAV extension or disable the WebDAV extension for your web site. 詳細については、次を参照してくださいIIS および WebDav。For more information, see IIS and WebDav

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

URI テンプレートには、構造的に類似する URI の大規模なセットを効率的に表現するための構文が備わっています。URI templates provide an efficient syntax for expressing large sets of structurally similar URIs. たとえば、テンプレート a/{segment}/c は、中間のセグメントの値を問わず、"a" で始まり "c" で終了する 3 つのセグメントから成る URI のセットを表しています。For example, the following template expresses the set of all three-segment URIs that begin with "a" and end with "c" without regard to the value of the intermediate segment: a/{segment}/c

このテンプレートによって、次のような URI が記述されます。This template describes URIs like the following:

  • a/x/ca/x/c

  • a/y/ca/y/c

  • a/z/ca/z/c

  • など。and so on.

このテンプレートでは、中かっこによる表記 ("{segment}") で、リテラル値ではなく、変数のセグメントを示しています。In this template, the curly brace notation ("{segment}") indicates a variable segment instead of a literal value.

.NET Framework は UriTemplate という URI テンプレートでの作業に使用できる新しい API を提供します。.NET Framework provides an API for working with URI templates called UriTemplate. UriTemplates を使用すると、次のことができます。UriTemplates allow you to do the following:

  • いずれかを呼び出すことができます、Bindを生成するパラメーターのセットを持つメソッド、完全なクローズ URIテンプレートに一致します。You can call one of the Bind methods with a set of parameters to produce a fully-closed URI that matches the template. つまり、URI テンプレート内の変数がすべて、実際の値に置き換えられます。This means all variables within the URI template are replaced with actual values.

  • 候補の URI を使用して Match() を呼び出すことができます。このメソッドは、テンプレートを使用して候補の URI を構成要素に分解し、テンプレート内の変数に従って分類される URI のさまざまな要素を収めたディクショナリを返します。You can call Match() with a candidate URI, which uses a template to break up a candidate URI into its constituent parts and returns a dictionary that contains the different parts of the URI labeled according to the variables in the template.

  • Bind() と Match() は逆のもので、Match( Bind( x ) ) を呼び出し、最初と同じ環境に戻ることができます。Bind() and Match() are inverses so that you can call Match( Bind( x ) ) and come back with the same environment you started with.

包含されたテンプレートを個別に扱うことができるデータ構造内の一連の UriTemplate オブジェクトを追跡することが必要になる場合がよくあります (特に、URI に基づいて要求をサービス操作にディスパッチすることが必要なサーバー上)。There are many times (especially on the server, where dispatching a request to a service operation based on the URI is necessary) that you want to keep track of a set of UriTemplate objects in a data structure that can independently address each of the contained templates. UriTemplateTable は、URI テンプレートのセットを表し、テンプレート セットと候補の URI が与えられると、最適の組み合わせを選択します。UriTemplateTable represents a set of URI templates and selects the best match given a set of templates and a candidate URI. これと関連付けられません (WCF に付属) 特定のネットワー キング スタック必要に応じて使用できるようにします。This is not affiliated with any particular networking stack (WCF included) so you can use it wherever necessary.

WCF サービス モデルは、UriTemplate および UriTemplateTable を使用して、UriTemplate によって記述された URI セットにサービス操作を関連付けます。The WCF Service Model makes use of UriTemplate and UriTemplateTable to associate service operations with a set of URIs described by a UriTemplate. サービス操作は、UriTemplate または WebGetAttribute によって WebInvokeAttribute に関連付けられます。A service operation is associated with a UriTemplate, using either the WebGetAttribute or the WebInvokeAttribute. 詳細についてはUriTemplateUriTemplateTableを参照してくださいUriTemplate と UriTemplateTableFor more information about UriTemplate and UriTemplateTable, see UriTemplate and UriTemplateTable

WebGet および WebInvoke 属性WebGet and WebInvoke Attributes

WCF WEB HTTP サービスは、さまざまなだけでなく取得動詞 (HTTP GET など) の使用が動詞 (HTTP POST、PUT、および削除など) を起動します。WCF WEB HTTP services make use of retrieval verbs (for example HTTP GET) in addition to various invoke verbs (for example HTTP POST, PUT, and DELETE). WCF WEB HTTP プログラミング モデルにより、サービス開発者は、コントロールの両方、URI テンプレートと動詞で各自のサービス操作に関連付けられている、WebGetAttributeWebInvokeAttributeです。The WCF WEB HTTP programming model allows service developers to control the both the URI template and verb associated with their service operations with the WebGetAttribute and WebInvokeAttribute. WebGetAttribute および WebInvokeAttribute を使用すると、個々の操作を URI と、それらの URI に関連付けられている HTTP メソッドにバインドする方法を制御できます。The WebGetAttribute and the WebInvokeAttribute allow you to control how individual operations get bound to URIs and the HTTP methods associated with those URIs. たとえば、次のコードでは、WebGetAttribute および WebInvokeAttribute を追加します。For example, adding WebGetAttribute and WebInvokeAttribute in the following code.

[ServiceContract]  
interface ICustomer  
{  
  //"View It"  

  [WebGet]  
  Customer GetCustomer():  

  //"Do It"  
    [WebInvoke]  
  Customer UpdateCustomerName( string id,   
                               string newName );  
}  

上記のコードを使用すると、次の HTTP 要求を行うことができます。The preceding code allows you to make the following HTTP requests.

GET /GetCustomer

POST /UpdateCustomerName

WebInvokeAttribute は、既定で POST に設定されていますが、他の動詞にも使用できます。WebInvokeAttribute defaults to POST but you can use it for other verbs too.

[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 サービスを作成します。To see a complete sample of a WCF service that uses the WCF WEB HTTP programming model, see How to: Create a Basic WCF Web HTTP Service

UriTemplate クエリ文字列パラメーターと URLUriTemplate Query String Parameters and URLs

サービス操作に関連付けられた URL を入力することによって、Web ブラウザーから Web スタイルのサービスを呼び出すことができます。Web-style services can be called from a Web browser by typing a URL that is associated with a service operation. このようなサービス操作は、文字列形式で指定する必要があるクエリ文字列パラメーターを URL 内で受け取ることができます。These service operations may take query string parameters that must be specified in a string form within the URL. 次の表に、URL 内で渡すことができる型と、使用される形式を示します。The following table shows the types that can be passed within a URL and the format used.

Type 形式Format
Byte 0 - 2550 - 255
SByte -128 - 127-128 - 127
Int16 -32768 - 32767-32768 - 32767
Int32 -2,147,483,648 - 2,147,483,647-2,147,483,648 - 2,147,483,647
Int64 -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807
UInt16 0 - 655350 - 65535
UInt32 0 - 4,294,967,2950 - 4,294,967,295
UInt64 0 - 18,446,744,073,709,551,6150 - 18,446,744,073,709,551,615
Single -3.402823e38 - 3.402823e38 (指数表記は要求されない)-3.402823e38 - 3.402823e38 (exponent notation is not required)
Double -1.79769313486232e308 - 1.79769313486232e308 (指数表記は要求されない)-1.79769313486232e308 - 1.79769313486232e308 (exponent notation is not required)
Char 任意の 1 文字Any single character
Decimal 標準表記による任意の小数 (指数なし)Any decimal in standard notation (no exponent)
Boolean True または False (大文字と小文字は区別されません)True or False (case insensitive)
String 任意の文字列 (null 文字列はサポートされず、エスケープは行われない)Any string (null string is not supported and no escaping is done)
DateTime MM/DD/YYYYMM/DD/YYYY

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

月 日 年Month Day Year

月日年 HH:MM:SS [AM|PM]Month Day Year HH:MM:SS [AM|PM]
TimeSpan DD.HH:MM:SSDD.HH:MM:SS

DD = 日、HH = 時、MM = 分、SS = 秒Where DD = Days, HH = Hours, MM = minutes, SS = Seconds
Guid GUID。たとえば、次のようになります。A GUID, for example:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8936DA01F-9ABD-4d9d-80C7-02AF85C822A8
DateTimeOffset MM/DD/YYYY HH:MM:SS MM:SSMM/DD/YYYY HH:MM:SS MM:SS

DD = 日、HH = 時、MM = 分、SS = 秒Where DD = Days, HH = Hours, MM = minutes, SS = Seconds
列挙Enumerations 列挙値。たとえば、次のコードのように列挙体を定義します。The enumeration value for example, which defines the enumeration as shown in the following code.

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

クエリ文字列に、任意の列挙値 (またはそれぞれに対応する integer 値) を指定できます。Any of the individual enumeration values (or their corresponding integer values) may be specified in the query string.
型と文字列表現を双方向に変換できる TypeConverterAttribute を持つ型。Types that have a TypeConverterAttribute that can convert the type to and from a string representation. 型コンバーターによって異なります。Depends on the Type Converter.

形式と WCF WEB HTTP プログラミング モデルFormats and the WCF WEB HTTP Programming Model

WCF WEB HTTP プログラミング モデルでは、さまざまなデータ形式を使用する新しい機能があります。The WCF WEB HTTP programming model has new features to work with many different data formats. WebHttpBinding は、バインディング層で次のさまざまな種類のデータを読み書きできます。At the binding layer, the WebHttpBinding can read and write the following different kinds of data:

  • XMLXML

  • JSONJSON

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

これは、WCF WEB HTTP プログラミング モデルは、あらゆる種類のデータを処理できますが、に対してプログラミングすることを意味Streamです。This means the WCF WEB HTTP programming model can handle any type of data but, you may be programming against Stream.

.NET Framework 3.5.NET Framework 3.5 は、配信フィード (ATOM および RSS) だけでなく、JSON データ (AJAX) にも対応しています。 provides support for JSON data (AJAX) as well as Syndication feeds (including ATOM and RSS). これらの機能に関する詳細については、次を参照してください。 WCF Web HTTP 書式WCF 配信の概要AJAX の統合と JSON サポートです。For more information about these features, see WCF Web HTTP FormattingWCF Syndication Overview and AJAX Integration and JSON Support.

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

WCF WEB HTTP プログラミング モデルはサポートされていません、ws-* プロトコル、WCF WEB HTTP サービスをセキュリティで保護する唯一の方法は、SSL を使用して HTTPS 経由でサービスを公開します。Because the WCF WEB HTTP programming model does not support the WS-* protocols, the only way to secure a WCF WEB HTTP service is to expose the service over HTTPS using SSL. SSL の設定の詳細についてはIIS 7.0IIS 7.0を参照してくださいを IIS で SSL を実装する方法For more information about setting up SSL with IIS 7.0IIS 7.0, see How to implement SSL in IIS

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

ChannelFactoryBase<TChannel> を使用してチャネルを作成するために WCF WEB HTTP サービスを呼び出すと、異なる WebHttpBehaviorEndpointAddress に渡されるとしても、EndpointAddress は構成ファイルに設定されている ChannelFactoryBase<TChannel> を使用します。When calling WCF WEB HTTP services using a ChannelFactoryBase<TChannel> to create a channel, the WebHttpBehavior uses the EndpointAddress set in the configuration file even if a different EndpointAddress is passed to the ChannelFactoryBase<TChannel>.

関連項目See Also

WCF 配信WCF Syndication
WCF Web HTTP プログラミング オブジェクト モデルWCF Web HTTP Programming Object Model
WCF Web HTTP プログラミング モデルWCF Web HTTP Programming Model