データ サービスの構成 (WCF Data Services)
WCF Data Services では、Open Data Protocol (OData) フィードを公開するデータ サービスを作成できます。 これらのフィードには、さまざまなデータ ソースからのデータが含まれることがあります。 WCF Data Services は、データ プロバイダーを使用して、このデータを OData フィードとして公開します。 これらのプロバイダーには、Entity Framework プロバイダー、リフレクション プロバイダー、およびカスタム データ サービス プロバイダー インターフェイスのセットがあります。 プロバイダーの実装は、サービスのデータ モデルを定義します。 詳細については、「データ サービス プロバイダー (WCF Data Services)」を参照してください。
WCF Data Services では、データ サービスは、データ サービスの種類がデータ モデルのエンティティ コンテナーである DataService<T> クラスから継承するクラスです。 このエンティティ コンテナーには、データ モデルのエンティティ セットにアクセスするために使用される IQueryable<T> を返す 1 つ以上のプロパティがあります。
データ サービスの動作は、DataServiceConfiguration クラスのメンバー、および DataServiceConfiguration クラスの DataServiceBehavior プロパティからアクセスされる DataServiceBehavior クラスのメンバーによって定義されます。 DataServiceConfiguration クラスは、クイックスタートで作成する Northwind サービスのようなデータ サービスによって実装される InitializeService メソッドに提供されます。
Public Class Northwind
Inherits DataService(Of NorthwindEntities)
' This method is called only once to initialize service-wide policies.
Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
' Grant only the rights needed to support the client application.
config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead _
Or EntitySetRights.WriteMerge _
Or EntitySetRights.WriteReplace)
config.SetEntitySetAccessRule("Order_Details", EntitySetRights.AllRead _
Or EntitySetRights.AllWrite)
config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead)
End Sub
End Class
public class Northwind : DataService<NorthwindEntities>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// Grant only the rights needed to support the client application.
config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead
| EntitySetRights.WriteMerge
| EntitySetRights.WriteReplace);
config.SetEntitySetAccessRule("Order_Details", EntitySetRights.AllRead
| EntitySetRights.AllWrite);
config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion =
System.Data.Services.Common.DataServiceProtocolVersion.V3;
}
}
データ サービス構成設定
DataServiceConfiguration クラスでは、以下のデータ サービスの動作を指定できます。
メンバー |
動作 |
---|---|
any および all 演算子を含むクエリのサポートを無効にできます。 |
|
$count パス セグメントおよび $inlinecount クエリ オプションを使用してデータ サービスに送信したカウント要求を無効にできます。 詳細については、OData: URI 規則に関する Web ページを参照してください。 |
|
$select クエリ オプションを使用してデータ サービスに送信された要求のデータ プロジェクションのサポートを無効にできます。 詳細については、「OData: URI 規則に関する Web ページ」を参照してください。 |
|
クエリ URI における空間リテラル値の指定のサポートを無効にできます。 |
|
注釈を使用してデータ モデルにボキャブラリを適用できます。 AnnotationsBuilder プロパティは、IEdmModel インスタンスのコレクションとして、データ モデルに対して 1 つ以上のモデル注釈を指定可能にするデリゲートを返します。モデル注釈は IEdmModel インスタンスとしてデリゲートに指定します。 詳細については、投稿の「WCF Data Services のボキャブラリ」を参照してください。 |
|
サービスが $metadata エンドポイントへの要求に応答する前に、データ モデルの検証を無効にできます。 |
|
IDataServiceMetadataProvider インターフェイスを使用して定義された動的メタデータ プロバイダーのメタデータでデータ型を公開します。 |
|
ペイロードに含まれている型を、要求で指定された実際のプロパティ型にデータ サービス ランタイムで変換するかどうかを指定できます。 |
|
データ サービスからの応答に、エンティティ間のリレーションシップ (アソシエーション) と具体的に対応するリンク要素が含まれているかどうかを指定できます。 $links 演算子を使用して、アソシエーションはアドレス指定されます。 詳細については、OData プロトコルの「3.2 エントリ間のリンクのアドレス指定に関する説明」を参照してください。 たとえ IncludeAssociationLinksInResponse が false でも、データ サービスは関連エンティティをアドレス指定するリンク要素を常に返します。 |
|
2 つのエンティティ間のリレーションシップ リンクを削除するときに、関連エンティティで登録済みの変更インターセプターを呼び出すかどうかを指定できます。 |
|
単一のバッチで許可される変更セットおよびクエリ操作の数を制限できます。 詳細については、OData: バッチ処理に関する Web ページおよび「バッチ処理 (WCF Data Services)」を参照してください。 |
|
単一の変更セットに含めることができる変更の数を制限できます。 詳細については、「方法: データ サービスの結果のページングを有効にする (WCF Data Services)」を参照してください。 |
|
$expand クエリ演算子を使用して 1 つの要求に含めることのできる関連エンティティの数を制限することによって応答のサイズを制限できます。 詳細については、次のトピックを参照してください。「OData: URI 規則に関する Web ページ」および「遅延コンテンツの読み込み (WCF Data Services)」を参照してください。 |
|
$expand クエリ演算子を使用して 1 つの要求に含めることのできる関連エンティティのグラフの深度を制限することによって応答のサイズを制限できます。 詳細については、次のトピックを参照してください。「OData: URI 規則に関する Web ページ」および「遅延コンテンツの読み込み (WCF Data Services)」を参照してください。 |
|
1 つの POST 要求に挿入できるエンティティの数を制限できます。 |
|
データ サービスによって使用される Atom プロトコルのバージョンを定義します。 MaxProtocolVersion に DataServiceProtocolVersion の最大値よりも低い値を設定した場合、WCF Data Services の最新の機能はデータ サービスにアクセスするクライアントで使用できなくなります。 詳細については、次のトピックを参照してください。 データ サービスのバージョン管理 (WCF Data Services). |
|
データ フィードとして返される各エンティティ セットのエンティティの数を制限することによって応答のサイズを制限できます。 |
|
データ サービスで認識される型のリストにデータ型を追加します。 |
|
データ サービスで使用可能なエンティティ セット リソースへのアクセス権を設定します。 アスタリスク (*) 値を名前パラメーターに使用すると、残りのすべてのエンティティ セットへのアクセスを同じレベルに設定できます。 エンティティ セットへのアクセスを設定する場合は、クライアント アプリケーションに必要なデータ サービス リソースへの最小アクセス特権を設定することをお勧めします。 詳細については、「WCF Data Services のセキュリティ保護」を参照してください。 特定の URI および HTTP アクションに必要な最小限のアクセス権の例については、「Minimum Resource Access Requirements」の表を参照してください。 |
|
エンティティ セット リソースの最大ページ サイズを設定します。 詳細については、「方法: データ サービスの結果のページングを有効にする (WCF Data Services)」を参照してください。 |
|
データ サービスで定義されるサービス アクションへのアクセス権を設定します。 詳細については、「OData アクションを使用してサーバー側の動作を実装する」を参照してください。 アスタリスク (*) 値を name パラメーターに使用すると、すべてのサービス アクションへのアクセス権を同じレベルに設定できます。 サービス アクションへのアクセスを設定する場合は、クライアント アプリケーションに必要なデータ サービス リソースへの最小アクセス特権を設定することをお勧めします。 詳細については、「WCF Data Services のセキュリティ保護」を参照してください。 |
|
データ サービスで定義されるサービス操作へのアクセス権を設定します。 詳細については、「サービス操作 (WCF Data Services)」を参照してください。 アスタリスク (*) 値を name パラメーターに使用すると、すべてのサービス操作へのアクセス権を同じレベルに設定できます。 サービス操作へのアクセスを設定する場合は、クライアント アプリケーションに必要なデータ サービス リソースへの最小アクセス特権を設定することをお勧めします。 詳細については、「WCF Data Services のセキュリティ保護」を参照してください。 |
|
この構成プロパティを使用すると、エラー応答メッセージで多くの情報を返すことによってデータ サービスのトラブルシューティングを容易にすることができます。 このオプションは、運用環境で使用することを目的としたものではありません。 詳細については、「WCF Data Services の開発と配置」を参照してください。 |
最小限のリソース アクセス要件
次の表に、特定の操作を実行するために付与されている必要があるエンティティ セットの最小限の権限を示します。 パスの例は、クイック スタートの完了時に作成される Northwind データ サービスに基づいています。 EntitySetRights 列挙体および ServiceOperationRights 列挙体は FlagsAttribute を使用して定義されているので、論理和演算子を使用して 1 つのエンティティ セットまたは操作に複数のアクセス許可を指定できます。 詳細については、「方法: データ サービスへのアクセスを有効にする (WCF Data Services)」を参照してください。
URI パスおよびクエリ オプション |
GET |
DELETE |
MERGE |
POST |
PUT |
---|---|---|---|---|---|
/Customers |
サポートなし |
サポートなし |
サポートなし |
||
/Customers('ALFKI') |
適用なし |
||||
/Customers('ALFKI')/Orders |
Customers:ReadSingle および Orders:ReadMultiple |
サポートなし。 |
サポートなし。 |
Customers: ReadSingle および WriteMerge または WriteReplace および Orders: およびWriteAppend |
サポートなし。 |
/Customers('ALFKI')/Orders(10643) |
Customers:ReadSingle および Orders:ReadSingle |
Customers:ReadSingle および Orders: ReadSingle および WriteDelete |
Customers:ReadSingle および Orders: ReadSingle および WriteMerge |
サポートなし。 |
Customers:ReadSingle および Orders: ReadSingle および WriteReplace |
/Orders(10643)/Customer |
Customers:ReadSingle および Orders:ReadSingle |
Customers: ReadSingle および WriteDelete および Orders:ReadSingle |
Customers: ReadSingle および WriteMerge および Orders:ReadSingle |
Customers:WriteAppend および Orders: WriteAppend および ReadSingle |
サポートなし。 |
/Customers('ALFKI')/$links/Orders |
Customers:ReadSingle および Orders:ReadMultiple |
サポートなし。 |
サポートなし。 |
Customers: ReadSingle および WriteMerge または WriteReplace および Orders:ReadSingle |
サポートなし。 |
/Customers('ALFKI')/$links/Orders(10643) |
Customers:ReadSingle および Orders:ReadSingle |
Customers: ReadSingle および WriteMerge または WriteReplace および Orders:ReadSingle |
サポートなし。 |
サポートなし。 |
サポートなし。 |
/Orders(10643)/$links/Customer |
Customers:ReadSingle および Orders:ReadSingle |
Orders: ReadSingle および WriteMerge または WriteReplace |
Customers:ReadSingle および Orders: ReadSingle および WriteMerge |
サポートなし。 |
Customers: ReadSingle; および Orders: ReadSingle および WriteReplace |
/Customers/$count |
サポートなし |
サポートなし。 |
サポートなし |
サポートなし |
|
/Customers('ALFKI')/ContactName |
サポートなし |
サポートなし。 |
|||
/Customers('ALFKI')/Address/StreetAddress/$value1 |
サポートなし |
サポートなし。 |
サポートなし |
||
/Customers('ALFKI')/ContactName/$value |
サポートなし |
||||
/Customers('ALFKI')/$value2 |
サポートなし |
サポートなし。 |
サポートなし |
||
/Customers?$select=Orders/*&$expand=Orders |
Customers:ReadSingle および Orders:ReadMultiple |
サポートなし |
サポートなし。 |
Customers:WriteAppend |
サポートなし |
/Customers('ALFKI')?$select=Orders/*&$expand=Orders |
Customers:ReadSingle および Orders:ReadMultiple |
サポートなし。 |
サポートなし。 |
サポートなし。 |
サポートなし |
1 この例では、Address は StreetAddress という名前のプロパティを持つ Customers エンティティの複合型プロパティを表します。 Northwind データ サービスによって使用されるモデルでは、この複合型は明示的に定義されていません。 Entity Framework プロバイダーを使用してデータ モデルを定義している場合、Entity Data Model ツールを使用して、このような複合型を定義できます。 詳細については、「How to: Create and Modify Complex Types (Entity Data Model Tools)」を参照してください。
2 この URI は、バイナリ ラージ オブジェクト (BLOB) を返すプロパティがメディア リンク エントリであるエンティティ (この場合、Customers) に属するメディア リソースとして定義されている場合にサポートされます。 詳細については、「ストリーミング プロバイダー (WCF Data Services)」を参照してください。
バージョン管理の要件
次のデータ サービス構成の動作には、OData プロトコルのバージョン 3 またはそれ以降のバージョンが必要です。
応答フィードにリレーションシップ リンク要素を含めるサポート。
any および all クエリ演算子のサポート。
サービス アクションおよび機能の定義のサポート。
空間データ型のサポート。
データ モデル注釈の定義によるボキャブラリのサポート。
$metadata エンドポイント要求に対するデータ モデル検証の無効化のサポート。
次のデータ サービス構成の動作には、OData プロトコルのバージョン 2 またはそれ以降のバージョンが必要です。
カウント要求とクエリ プロジェクションのサポートには OData プロトコルのバージョン 2.0 およびそれ以降のバージョンが必要です。
プロジェクションの $select クエリ オプションのサポートには OData プロトコルのバージョン 2.0 およびそれ以降のバージョンが必要です。
詳細については、「データ サービスのバージョン管理 (WCF Data Services)」を参照してください。
関連項目
概念
データ サービスのホスティング (WCF Data Services)