WCF Data Services の概要
WCF Data Services では、Open Data Protocol (OData) を使用して、Web またはイントラネット用のデータ サービスを作成し、それらを使用することができます。 OData を使用すると、URI でアドレス指定できるリソースとしてデータを公開できます。 したがって、Representational State Transfer (REST) のセマンティクス (標準的な HTTP 動詞 GET、PUT、POST、DELETE) を使用してデータにアクセスし、そのデータを変更できます。このトピックでは、OData で定義されるパターンとプラクティスの両方の概要について説明します。また、.NET Framework ベースのアプリケーションで OData を利用するために WCF Data Services で提供される機能についても説明します。
リソースとしてのデータのアドレス指定
OData は、URI でアドレス指定できるリソースとしてデータを公開します。リソース パスは、Entity Data Model のエンティティとリレーションシップの規則に基づいて構築されます。 このモデルでは、エンティティはアプリケーション ドメイン内のデータの操作単位を表します (顧客、注文、項目、製品など)。 詳細については、「Entity Data Model」を参照してください。
OData では、エンティティ型のインスタンスを含むエンティティ セットとしてエンティティ リソースのアドレスを指定します。 たとえば、http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders という URI を指定すると、Northwind データ サービスにアクセスして、CustomerID 値が ALFKI. である顧客のすべての注文を取得できます。
クエリ式を使用して、リソースに対して従来のクエリ操作 (フィルターの適用、並べ替え、ページングなど) を実行できます。 たとえば、http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders?$filter=Freight gt 50 という URI は、リソースをフィルターして、$50 以上の運賃の注文だけを返します。 詳細については、「OData サービスへのアクセス (WCF Data Services)」を参照してください。
相互運用可能なデータ アクセス
OData では標準的なインターネット プロトコルに基づいてデータ サービスを作成するので、.NET Framework 対応でないアプリケーションとも相互運用が可能です。 標準的な URI を使用してデータのアドレスを指定できるので、アプリケーションは Representational State Transfer (REST) のセマンティクス (特に GET、PUT、POST、および DELETE の HTTP 動詞) を使用してデータにアクセスして変更できます。 そのため、標準的な HTTP プロトコルを介して転送されるデータの解析、およびこれらのデータへのアクセスを行うことができる任意のクライアントからこれらのサービスにアクセスできます。
OData は Atom 公開プロトコル (AtomPub) に対する一連の拡張を定義しています。さまざまなクライアント アプリケーションおよびプラットフォームに対応するために、複数のデータ形式による HTTP 要求と応答をサポートしています。 OData フィードは、Atom、JavaScript Object Notation (JSON)、および通常の XML でデータを表現できます。 Atom が既定の形式ですが、フィードの形式は HTTP 要求のヘッダーで指定されます。 詳細については、OData: Atom 形式に関する Web ページおよび OData: JSON 形式に関する Web ページを参照してください。
データを OData フィードとして公開する場合、WCF Data Services はその他の既存のインターネット機能をキャッシュや認証などの操作で使用します。 WCF Data Services ではこれを実行するため、ASP.NET、Windows Communication Foundation (WCF)、インターネット インフォメーション サービス (IIS) など既存のホスト アプリケーションおよびサービスと統合します。OData メッセージのシリアル化と逆シリアル化は OData ライブラリにより実行されます。 Web ベース アプリケーションまたはサービスが既に HTTP メッセージング機能を提供している場合、OData ライブラリを使用して直接 OData 準拠メッセージをシリアル化および逆シリアル化することを検討してください。 詳細については、「OData ライブラリ」を参照してください。
ストレージの独立性
リソースはエンティティ リレーションシップ モデルに基づいてアドレス指定されますが、WCF Data Services は、基になるデータ ソースとは関係なく OData フィードを公開します。URI で指定されたリソースへの HTTP 要求を WCF Data Services が受け取ると、その要求は逆シリアル化され、その要求の表現が WCF Data Services プロバイダーに渡されます。 このプロバイダーは、要求をデータ ソース固有の形式に変換し、基になるデータ ソースで要求を実行します。WCF Data Services は、OData で規定されるリソースをアドレス指定する概念モデルと、基になるデータ ソースのスキーマとを分離することによってストレージの独立性を実現します。
WCF Data Services と ADO.NET Entity Framework の組み合わせにより、リレーショナル データを公開するデータ サービスを作成できます。 Entity Data Model ツールを使用して、エンティティとしてアドレス指定可能なリソースを含むデータ モデルを作成すると同時に、このモデルと基になるデータベースのテーブルの間のマッピングを定義できます。 詳細については、「Entity Framework プロバイダー (WCF Data Services)」を参照してください。
WCF Data Services では、IQueryable<T> インターフェイスの実装を返すデータ構造を公開するデータ サービスを作成することもできます。 そのため、.NET Framework 型からデータを公開するデータ サービスを作成できます。 IUpdatable インターフェイスも実装すると、作成、更新、および削除操作がサポートされます。 詳細については、「リフレクション プロバイダー (WCF Data Services)」を参照してください。 一連のカスタム データ サービス プロバイダー インターフェイスを実装すると、データ モデルが実行時にのみ既知となる場合でも、WCF Data Services を使用して任意のソースからデータを発行することができます。 詳細については、「カスタム データ サービス プロバイダー (WCF Data Services)」を参照してください。
WCF Data Services をこれらのデータ プロバイダーと統合する方法については、このトピックの最後にあるアーキテクチャの図を参照してください。
カスタム ビジネス ロジック
WCF Data Services を使用すると、サービス操作およびインターセプターを介してデータ サービスにカスタム ビジネス ロジックを簡単に追加できます。 サービス操作とは、データ リソースと同じ形態の URI によるアドレス指定が可能な、サーバーで定義されるメソッドです。 サービス操作では、クエリ式構文を使用して、操作によって返されるデータのフィルター、並べ替え、およびページングを行うこともできます。たとえば、https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$orderby=OrderDate&$top=10&$skip=10 という URI は、ロンドン (London) の顧客の注文を Northwind データ サービスから返し、ページングされた結果を OrderDate で並べ替える GetOrdersByCity というサービス操作への呼び出しを表します。 詳細については、「サービス操作 (WCF Data Services)」を参照してください。
サービス アクションとは、データ サービス リソースにバインドでき、システムに影響を及ぼす特別な種類の操作です。 詳細については、「OData アクションを使用してサーバー側の動作を実装する」を参照してください。
インターセプターを使用すると、カスタム アプリケーション ロジックをデータ サービスによる要求メッセージまたは応答メッセージの処理に統合できます。 インターセプターは、指定されたエンティティ セットに対してクエリ、挿入、更新、または削除の各操作が行われたときに呼び出されます。 インターセプターは、その後、データの変更や承認ポリシーの強制を行うか、さらには操作を終了することもあります。 インターセプターのメソッドは、データ サービスによって公開される何らかのエンティティ セットに明示的に登録されている必要があります。 詳細については、「インターセプター (WCF Data Services)」を参照してください。
クライアント ライブラリ
OData は、データ サービスと対話する統一パターンのセットを定義します。 その結果、これらのサービスに基づいて再使用可能なコンポーネントを作成できます (データ サービスの使用を簡略化するクライアント側ライブラリなど)。
WCF Data Services には、.NET Framework ベースのクライアント アプリケーションと Silverlight ベースのクライアント アプリケーションの両方のクライアント ライブラリが含まれます。 これらのクライアント ライブラリでは、.NET Framework オブジェクトを使用してデータ サービスと対話できます。 また、オブジェクト ベースのクエリと LINQ クエリ、関連オブジェクトの読み込み、変更の追跡、および ID 解決もサポートしています。詳細については、「データ クライアント (WCF Data Services)」を参照してください。
.NET Framework および Silverlight に含まれる OData クライアント ライブラリのほかに、PHP、Java、iOS アプリケーションなどのクライアント アプリケーションで OData フィードを使用できるようにするクライアント ライブラリがあります。 Javascript アプリケーション開発者は、OData を利用する datajs ライブラリを対象とすることもできます。
アーキテクチャの概要
OData フィードを公開し、OData 対応クライアント ライブラリでこれらのフィードを使用するための WCF Data Services アーキテクチャを次の図に示します。
関連項目
その他の技術情報
Accessing a Data Service (WCF Data Services)