データ サービスの構成 (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 クラスでは、以下のデータ サービスの動作を指定できます。

メンバー

動作

AcceptAnyAllRequests

any および all 演算子を含むクエリのサポートを無効にできます。

AcceptCountRequests

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

AcceptProjectionRequests

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

AcceptSpatialLiteralsInQuery

クエリ URI における空間リテラル値の指定のサポートを無効にできます。

AnnotationsBuilder

注釈を使用してデータ モデルにボキャブラリを適用できます。 AnnotationsBuilder プロパティは、IEdmModel インスタンスのコレクションとして、データ モデルに対して 1 つ以上のモデル注釈を指定可能にするデリゲートを返します。モデル注釈は IEdmModel インスタンスとしてデリゲートに指定します。 詳細については、投稿の「WCF Data Services のボキャブラリ」を参照してください。

DisableValidationOnMetadataWrite

サービスが $metadata エンドポイントへの要求に応答する前に、データ モデルの検証を無効にできます。

EnableTypeAccess

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

EnableTypeConversion

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

IncludeAssociationLinksInResponse

データ サービスからの応答に、エンティティ間のリレーションシップ (アソシエーション) と具体的に対応するリンク要素が含まれているかどうかを指定できます。 $links 演算子を使用して、アソシエーションはアドレス指定されます。 詳細については、OData プロトコルの「3.2 エントリ間のリンクのアドレス指定に関する説明」を参照してください。 たとえ IncludeAssociationLinksInResponse が false でも、データ サービスは関連エンティティをアドレス指定するリンク要素を常に返します。

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)」を参照してください。

SetServiceActionAccessRule(String, ServiceActionRights)

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

SetServiceOperationAccessRule

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

UseVerboseErrors

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

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

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

URI パスおよびクエリ オプション

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/$value1

ReadSingle

WriteDelete

サポートなし

サポートなし。

サポートなし

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

ReadSingle

ReadSingle およびWriteDelete

WriteMerge

サポートなし

WriteReplace

/Customers('ALFKI')/$value2

ReadSingle

サポートなし

サポートなし。

サポートなし

WriteReplace

/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)

その他の技術情報

データ サービス (WCF Data Services)