Partager via


Configuration du service de données (WCF Data Services)

Avec Services de données WCF , vous pouvez créer des services de données qui exposent des flux Protocole OData (Open Data) . Les données contenues dans ces flux peuvent provenir de plusieurs sources de données. Services de données WCF utilise des fournisseurs de données pour exposer ces données comme un flux OData . Ces fournisseurs comprennent un fournisseur Entity Framework , un fournisseur de réflexion et un jeu d'interfaces de fournisseur de services de données personnalisé. L'implémentation de fournisseur définit le modèle de données du service. Pour plus d'informations, consultez Fournisseurs de services de données (WCF Data Services).

Dans Services de données WCF , un service de données est une classe qui hérite de la classe DataService , où le type du service de données est le conteneur d'entités du modèle de données. Ce conteneur d'entités a une ou plusieurs propriétés qui retournent un objet IQueryable utilisé pour accéder aux jeux d'entités dans le modèle de données.

Les comportements du service de données sont définis par les membres de la classe DataServiceConfiguration, et par les membres de la classe DataServiceBehavior, accessible depuis la propriété DataServiceBehavior de la classe DataServiceConfiguration. La classe DataServiceConfiguration est fournie à la méthode InitializeService implémentée par le service de données, comme dans l'implémentation suivante d'un service de données Northwind :

' 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;
}

Paramètres de la configuration du service de données

La classe DataServiceConfiguration vous permet de spécifier les comportements de service de données suivants :

Membre Comportement

AcceptCountRequests

Vous permet de désactiver les demandes de nombre soumises au service de données à l'aide du segment de chemin d'accès $count et l'option de requête $inlinecount. Pour plus d'informations, consultez OData : conventions URI (en anglais).

AcceptProjectionRequests

Vous permet de désactiver la prise en charge pour la projection de données dans les demandes soumises au service de données à l'aide de l'option de requête $select. Pour plus d'informations, consultez OData : conventions URI.

EnableTypeAccess

Permet l'exposition d'un type de données dans les métadonnées pour un fournisseur de métadonnées dynamique défini à l'aide de l'interface IDataServiceMetadataProvider.

EnableTypeConversion

Vous permet de spécifier si l'exécution du service de données doit convertir le type contenu dans la charge utile au type de propriété réel spécifié dans la demande.

InvokeInterceptorsOnLinkDelete

Vous permet de spécifier si les intercepteurs de modification enregistrés sont appelés sur les entités liées lorsqu'un lien de relation entre deux entités est supprimé.

MaxBatchCount

Vous permet de limiter le nombre d'ensembles de modifications et d'opérations de requête autorisés dans un lot unique. Pour plus d'informations, consultez OData : traitement par lots (en anglais) et Opérations de traitement par lot (WCF Data Services).

MaxChangesetCount

Vous permet de limiter le nombre de modifications qui peuvent être incluses dans un seul ensemble de modifications. Pour plus d'informations, consultez Procédure : permettre la pagination de résultats du service des données (WCF Data Services).

MaxExpandCount

Vous permet de limiter la taille d'une réponse en limitant le nombre d'entités connexes qui peuvent être incluses dans une demande unique à l'aide de l'opérateur de requête $expand. Pour plus d'informations, consultez OData : Conventions d'URI et Chargement de contenu différé (WCF Data Services).

MaxExpandDepth

Vous permet de limiter la taille d'une réponse en limitant la profondeur du graphique d'entités connexes qui peuvent être incluses dans une demande unique à l'aide de l'opérateur de requête $expand. Pour plus d'informations, consultez OData : Conventions d'URI et Chargement de contenu différé (WCF Data Services).

MaxObjectCountOnInsert

Vous permet de limiter le nombre d'entités à insérer et pouvant être contenues dans une requête POST unique.

MaxProtocolVersion

Définit la version du protocole Atom utilisé par le service de données. Lorsque la valeur de MaxProtocolVersion est définie sur une valeur inférieure à la valeur maximale de DataServiceProtocolVersion, les fonctionnalités les plus récentes d'Services de données WCF ne sont pas disponibles pour les clients qui accèdent au service de données. Pour plus d'informations, consultez Utilisation de plusieurs versions de WCF Data Services.

MaxResultsPerCollection

Vous permet de limiter la taille d'une réponse en limitant le nombre d'entités dans chaque jeu d'entités retourné comme un flux de données.

RegisterKnownType

Ajoute un type de données à la liste des types reconnus par le service de données.

SetEntitySetAccessRule

Définit les droits d'accès pour les ressources de jeu d'entités qui sont disponibles sur le service de données. Une valeur d'astérisque (* peut être fournie pour le paramètre de nom pour définir l'accès pour tous les jeux d'entités restants au même niveau. Nous vous recommandons de définir l'accès aux jeux d'entités pour fournir l'accès le moins privilégié aux ressources de service de données requises par les applications clientes. Pour plus d'informations, consultez Sécurisation de WCF Data Services. Pour des exemples de droits d'accès minimaux requis pour un URI et une action HTTP donnés, consultez le tableau dans la section Minimum Resource Access Requirements.

SetEntitySetPageSize

Définit la taille maximale de page pour une ressource de jeu d'entités. Pour plus d'informations, consultez Procédure : permettre la pagination de résultats du service des données (WCF Data Services).

SetServiceOperationAccessRule

Définit les droits d'accès pour les opérations de service définies sur le service de données. Pour plus d'informations, consultez Opérations de service (WCF Data Services). Une valeur d'astérisque (* peut être fournie pour le paramètre de nom pour définir l'accès pour toutes les opérations de service au même niveau. Nous vous recommandons de définir l'accès aux opérations de service pour fournir l'accès le moins privilégié aux ressources de service de données requises par les applications clientes. Pour plus d'informations, consultez Sécurisation de WCF Data Services.

UseVerboseErrors

Cette propriété de configuration vous permet de dépanner plus facilement un service de données en retournant plus d'informations dans le message de réponse d'erreur. L'utilisation de cette option n'est pas destinée à un environnement de production. Pour plus d'informations, consultez Développer et déployer WCF Data Services.

Spécifications minimales pour l'accès aux ressources

Le tableau suivant détaille les droits minimaux de jeu d'entités qui doivent être accordés pour exécuter une opération spécifique. Les exemples de chemin d'accès sont basés sur le service de données Northwind créé lorsque vous effectuez le démarrage rapide. Puisque l'énumération EntitySetRights et l'énumération ServiceOperationRights sont toutes deux définies à l'aide de l'objet FlagsAttribute, vous pouvez utiliser un opérateur OR logique pour spécifier plusieurs autorisations pour un jeu d'entités ou une opération unique. Pour plus d'informations, consultez Procédure : activer l'accès au service de données (WCF Data Services).

Chemin d'accès/action GET DELETE MERGE POST PUT

/Customers

ReadMultiple

Non pris en charge

Non pris en charge

WriteAppend

Non pris en charge

/Customers('ALFKI')

ReadSingle

ReadSingle et WriteDelete

ReadSingle et WriteMerge

N/A

ReadSingle et WriteReplace

/Customers('ALFKI')/Orders

Customers: ReadSingle

– et –

Orders: ReadMultiple

Non pris en charge

Non pris en charge

Customers: ReadSingle et WriteMerge ou WriteReplace

– et –

Orders : et WriteAppend

Non pris en charge

/Customers('ALFKI')/Orders(10643)

Customers: ReadSingle

– et –

Orders: ReadSingle

Customers: ReadSingle

– et –

Orders: ReadSingle et WriteDelete

Customers: ReadSingle

– et –

Orders: ReadSingle et WriteMerge

Non pris en charge

Customers: ReadSingle

– et –

Orders: ReadSingle et WriteReplace

/Orders(10643)/Customer

Customers: ReadSingle

– et –

Orders: ReadSingle

Customers: ReadSingle et WriteDelete

– et –

Orders: ReadSingle

Customers: ReadSingle et WriteMerge ;

– et –

Orders: ReadSingle

Customers: WriteAppend

– et –

Orders: WriteAppend et ReadSingle

Non pris en charge

/Customers('ALFKI')/$links/Orders

Customers: ReadSingle

– et –

Orders: ReadMultiple

Non pris en charge

Non pris en charge

Customers: ReadSingle et WriteMerge ou WriteReplace

– et –

Orders: ReadSingle

Non pris en charge

/Customers('ALFKI')/$links/Orders(10643)

Customers: ReadSingle

– et –

Orders: ReadSingle

Customers: ReadSingle et WriteMerge ou WriteReplace

– et –

Orders: ReadSingle

Non pris en charge

Non pris en charge

Non pris en charge

/Orders(10643)/$links/Customer

Customers: ReadSingle

– et –

Orders: ReadSingle

Orders: ReadSingle et WriteMerge ou WriteReplace

Customers: ReadSingle

– et –

Orders: ReadSingle et WriteMerge

Non pris en charge

Customers: ReadSingle;

– et –

Orders: ReadSingle et WriteReplace

/Customers/$count

ReadMultiple

Non pris en charge

Non pris en charge

Non pris en charge

Non pris en charge

/Customers('ALFKI')/ContactName

ReadSingle

Non pris en charge

WriteMerge

Non pris en charge

WriteReplace

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

ReadSingle

WriteDelete

Non pris en charge

Non pris en charge

Non pris en charge

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

ReadSingle

ReadSingle et WriteDelete

WriteMerge

Non pris en charge

WriteReplace

/Customers('ALFKI')/$value 2

ReadSingle

Non pris en charge

Non pris en charge

Non pris en charge

WriteReplace

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

Customers: ReadSingle

– et –

Orders: ReadMultiple

Non pris en charge

Non pris en charge

Customers: WriteAppend

Non pris en charge

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

Customers: ReadSingle

– et –

Orders: ReadMultiple

Non pris en charge

Non pris en charge

Non pris en charge

Non pris en charge

1 dans cet exemple, Address représente une propriété de type complexe de l'entité Customers qui a une propriété nommée StreetAddress. Le modèle utilisé par les services de données Northwind ne définit pas ce type complexe explicitement. Lorsque le modèle de données est défini à l'aide du fournisseur Entity Framework , vous pouvez utiliser les outils Entity Data Model pour définir un tel type complexe. Pour plus d'informations, consultez How to: Create and Modify Complex Types (Entity Data Model Tools).

2 cet URI est pris en charge lorsqu'une propriété qui retourne un objet BLOB (binary large object) est définie comme étant la ressource multimédia appartenant à une entité qui est une entrée de lien média, en l'occurrence Customers. Pour plus d'informations, consultez Fournisseurs de diffusion en continu (WCF Data Services).

Conditions requises pour le contrôle de version

Les comportements de configuration du service de données suivants nécessitent la version 2 du protocole OData ou les versions ultérieures.

  • Prise en charge des demandes relatives au nombre de lignes.

  • Prise en charge de l'option de requête $select pour la projection.

Pour plus d'informations, consultez Utilisation de plusieurs versions de WCF Data Services.

Voir aussi

Concepts

Hébergement du service de données (WCF Data Services)

Autres ressources

Définition de WCF Data Services