データ サービスの構成 (WCF Data Services)

WCF Data Services では、Open Data Protocol (OData) フィードを公開するデータ サービスを作成できます。これらのフィードには、さまざまなデータ ソースからのデータが含まれることがあります。WCF Data Services は、データ プロバイダーを使用して、このデータを OData フィードとして公開します。これらのプロバイダーには、Entity Framework プロバイダー、リフレクション プロバイダー、およびカスタム データ サービス プロバイダー インターフェイスのセットがあります。プロバイダーの実装は、サービスのデータ モデルを定義します。詳細については、「データ サービス プロバイダー (WCF Data Services)」を参照してください。

WCF Data Services では、データ サービスは、データ サービスの種類がデータ モデルのエンティティ コンテナーである DataService クラスから継承するクラスです。このエンティティ コンテナーには、データ モデルのエンティティ セットにアクセスするために使用される IQueryable を返す 1 つ以上のプロパティがあります。

データ サービスの動作は、DataServiceConfiguration クラスのメンバー、および DataServiceConfiguration クラスの DataServiceBehavior プロパティからアクセスされる DataServiceBehavior クラスのメンバーによって定義されます。DataServiceConfiguration クラスは、Northwind データ サービスの次の実装のように、データ サービスによって実装される InitializeService メソッドに提供されます。

' This method is called only once to initialize service-wide policies.
Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
    ' Set the access rules of feeds exposed by the data service, which is
    ' based on the requirements of client applications.
    config.SetEntitySetAccessRule("Customers", EntitySetRights.ReadSingle)
    config.SetEntitySetAccessRule("Employees", EntitySetRights.ReadSingle)
    config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead _
        And EntitySetRights.WriteAppend _
        And EntitySetRights.WriteMerge)
    config.SetEntitySetAccessRule("Order_Details", EntitySetRights.All)
    config.SetEntitySetAccessRule("Products", EntitySetRights.ReadMultiple)

    ' Set page size defaults for the data service.
    config.SetEntitySetPageSize("Orders", 20)
    config.SetEntitySetPageSize("Order_Details", 50)
    config.SetEntitySetPageSize("Products", 50)

    ' Paging requires v2 of the OData protocol.
    config.DataServiceBehavior.MaxProtocolVersion = _
        System.Data.Services.Common.DataServiceProtocolVersion.V2
End Sub
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
    // Set the access rules of feeds exposed by the data service, which is
    // based on the requirements of client applications.
    config.SetEntitySetAccessRule("Customers", EntitySetRights.ReadSingle);
    config.SetEntitySetAccessRule("Employees", EntitySetRights.ReadSingle);
    config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead 
        & EntitySetRights.WriteAppend
        & EntitySetRights.WriteMerge);
    config.SetEntitySetAccessRule("Order_Details", EntitySetRights.All);
    config.SetEntitySetAccessRule("Products", EntitySetRights.ReadMultiple);

    // Set page size defaults for the data service.
    config.SetEntitySetPageSize("Orders", 20);
    config.SetEntitySetPageSize("Order_Details", 50);
    config.SetEntitySetPageSize("Products", 50);

    // Paging requires v2 of the OData protocol.
    config.DataServiceBehavior.MaxProtocolVersion =
        System.Data.Services.Common.DataServiceProtocolVersion.V2;
}

データ サービス構成設定

DataServiceConfiguration クラスでは、以下のデータ サービスの動作を指定できます。

メンバー 動作

AcceptCountRequests

$count パス セグメントおよび $inlinecount クエリ オプションを使用してデータ サービスに送信したカウント要求を無効にできます。詳細については、OData: URI 規則に関する Web ページを参照してください。

AcceptProjectionRequests

$select クエリ オプションを使用してデータ サービスに送信された要求のデータ プロジェクションのサポートを無効にできます。詳細については、OData: URI 規則に関する Web ページを参照してください。

EnableTypeAccess

IDataServiceMetadataProvider インターフェイスを使用して定義された動的メタデータ プロバイダーのメタデータでデータ型を公開します。

EnableTypeConversion

ペイロードに含まれている型を、要求で指定された実際のプロパティ型にデータ サービス ランタイムで変換するかどうかを指定できます。

InvokeInterceptorsOnLinkDelete

2 つのエンティティ間のリレーションシップ リンクを削除するときに、関連エンティティで登録済みの変更インターセプターを呼び出すかどうかを指定できます。

MaxBatchCount

単一のバッチで許可される変更セットおよびクエリ操作の数を制限できます。詳細については、OData: バッチ処理に関する Web ページおよび「バッチ処理 (WCF Data Services)」を参照してください。

MaxChangesetCount

単一の変更セットに含めることができる変更の数を制限できます。詳細については、「方法: データ サービスの結果のページングを有効にする (WCF Data Services)」を参照してください。

MaxExpandCount

$expand クエリ演算子を使用して 1 つの要求に含めることのできる関連エンティティの数を制限することによって応答のサイズを制限できます。詳細については、次のトピックを参照してください。、OData: URI 規則に関する Web ページおよび「遅延コンテンツの読み込み (WCF Data Services)」を参照してください。

MaxExpandDepth

$expand クエリ演算子を使用して 1 つの要求に含めることのできる関連エンティティのグラフの深度を制限することによって応答のサイズを制限できます。詳細については、次のトピックを参照してください。、OData: URI 規則に関する Web ページおよび「遅延コンテンツの読み込み (WCF Data Services)」を参照してください。

MaxObjectCountOnInsert

1 つの POST 要求に挿入できるエンティティの数を制限できます。

MaxProtocolVersion

データ サービスによって使用される Atom プロトコルのバージョンを定義します。MaxProtocolVersionDataServiceProtocolVersion の最大値よりも低い値を設定した場合、WCF Data Services の最新の機能はデータ サービスにアクセスするクライアントで使用できなくなります。詳細については、次のトピックを参照してください。、「WCF Data Services の複数のバージョンの使用」を参照してください。

MaxResultsPerCollection

データ フィードとして返される各エンティティ セットのエンティティの数を制限することによって応答のサイズを制限できます。

RegisterKnownType

データ サービスで認識される型のリストにデータ型を追加します。

SetEntitySetAccessRule

データ サービスで使用可能なエンティティ セット リソースへのアクセス権を設定します。アスタリスク (*) 値を名前パラメーターに使用すると、残りのすべてのエンティティ セットへのアクセスを同じレベルに設定できます。エンティティ セットへのアクセスを設定する場合は、クライアント アプリケーションに必要なデータ サービス リソースへの最小アクセス特権を設定することをお勧めします。詳細については、「WCF Data Services のセキュリティ保護」を参照してください。特定の URI および HTTP アクションに必要な最小限のアクセス権の例については、「Minimum Resource Access Requirements」の表を参照してください。

SetEntitySetPageSize

エンティティ セット リソースの最大ページ サイズを設定します。詳細については、「方法: データ サービスの結果のページングを有効にする (WCF Data Services)」を参照してください。

SetServiceOperationAccessRule

データ サービスで定義されるサービス操作へのアクセス権を設定します。詳細については、「サービス操作 (WCF Data Services)」を参照してください。アスタリスク (*) 値を名前パラメーターに使用すると、残りのすべてのサービス操作へのアクセスを同じレベルに設定できます。サービス操作へのアクセスを設定する場合は、クライアント アプリケーションに必要なデータ サービス リソースへの最小アクセス特権を設定することをお勧めします。詳細については、「WCF Data Services のセキュリティ保護」を参照してください。

UseVerboseErrors

この構成プロパティを使用すると、エラー応答メッセージで多くの情報を返すことによってデータ サービスのトラブルシューティングを容易にすることができます。このオプションは、運用環境で使用することを目的としたものではありません。詳細については、「WCF Data Services の開発と配置」を参照してください。

最小限のリソース アクセス要件

次の表に、特定の操作を実行するために付与されている必要があるエンティティ セットの最小限の権限を示します。パスの例は、クイック スタートの完了時に作成される Northwind データ サービスに基づいています。EntitySetRights 列挙体および ServiceOperationRights 列挙体は FlagsAttribute を使用して定義されているので、論理和演算子を使用して 1 つのエンティティ セットまたは操作に複数のアクセス許可を指定できます。詳細については、「方法: データ サービスへのアクセスを有効にする (WCF Data Services)」を参照してください。

パス/アクション GET DELETE MERGE POST PUT

/Customers

ReadMultiple

サポートなし

サポートなし

WriteAppend

サポートなし

/Customers('ALFKI')

ReadSingle

ReadSingle およびWriteDelete

ReadSingle およびWriteMerge

適用なし

ReadSingle およびWriteReplace

/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

ReadMultiple

サポートなし

サポートなし

サポートなし

サポートなし

/Customers('ALFKI')/ContactName

ReadSingle

サポートなし

WriteMerge

サポートなし

WriteReplace

/Customers('ALFKI')/Address/StreetAddress/$value 1

ReadSingle

WriteDelete

サポートなし

サポートなし

サポートなし

/Customers('ALFKI')/ContactName/$value

ReadSingle

ReadSingle およびWriteDelete

WriteMerge

サポートなし

WriteReplace

/Customers('ALFKI')/$value 2

ReadSingle

サポートなし

サポートなし

サポートなし

WriteReplace

/Customers?$select=Orders/*&$expand=Orders

Customers:ReadSingle

および

Orders:ReadMultiple

サポートなし

サポートなし

Customers:WriteAppend

サポートなし

/Customers('ALFKI')?$select=Orders/*&$expand=Orders

Customers:ReadSingle

および

Orders:ReadMultiple

サポートなし

サポートなし

サポートなし

サポートなし

1 この例では、AddressStreetAddress という名前のプロパティを持つ 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 プロトコルのバージョン 2 またはそれ以降のバージョンが必要です。

  • カウント要求のサポート。

  • 射影の $select クエリ オプションのサポート。

詳細については、「WCF Data Services の複数のバージョンの使用」を参照してください。

参照

概念

データ サービスのホスティング (WCF Data Services)

その他のリソース

WCF Data Services の定義