Configurar el servicio de datos (WCF Data Services)
Con Servicios de datos de Microsoft WCF, puede crear servicios de datos que expongan fuentes de Open Data Protocol (OData). Los datos de estas fuentes pueden proceder de diferentes orígenes de datos. Servicios de datos de Microsoft WCF utiliza proveedores de datos para exponer estos datos como una fuente de OData. Estos proveedores incluyen un proveedor de Entity Framework, un proveedor de reflexión y un conjunto de interfaces de proveedor de servicio de datos personalizados. La implementación del proveedor define el modelo de datos del servicio. Para obtener más información, vea Proveedores de servicios de datos (WCF Data Services).
En Servicios de datos de Microsoft WCF, un servicio de datos es una clase que hereda de la clase DataService<T>, donde el tipo del servicio de datos es el contenedor de entidades del modelo de datos. Este contenedor de entidades tiene una o varias propiedades que devuelven una interfaz IQueryable<T>, que se usa para tener acceso a los conjuntos de entidades del modelo de datos.
Los miembros de la clase DataServiceConfiguration definen los comportamientos del servicio de datos junto con los miembros de la clase DataServiceBehavior, a la que se tiene acceso desde la propiedad DataServiceBehavior de la clase DataServiceConfiguration. La clase DataServiceConfiguration se proporciona al método InitializeService, implementado por el servicio de datos, como en el servicio de Northwind siguiente que se crea al completar el tutorial rápido:
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;
}
}
Parámetros de configuración del servicio de datos
La clase DataServiceConfiguration permite especificar los comportamientos siguientes del servicio de datos.
Miembro |
Comportamiento |
---|---|
Le permite deshabilitar la compatibilidad con consultas que incluyen los operadores any y all. |
|
Permite deshabilitar las solicitudes de recuento que se envían al servicio de datos usando el segmento de ruta de acceso $count y la opción de consulta $inlinecount. Para obtener más información, vea OData: convenciones URI. |
|
Permite deshabilitar la compatibilidad con la proyección de los datos en las solicitudes que se envían al servicio de datos usando la opción de consulta $select. Para obtener más información, vea OData: convenciones de URI. |
|
Le permite deshabilitar la compatibilidad con el suministro de valores literales espaciales en el URI de una consulta. |
|
Le permite aplicar vocabularios al modelo de datos mediante anotaciones. La propiedad AnnotationsBuilder devuelve un delegado que le permite proporcionar una o más anotaciones del modelo, como una colección de instancias de IEdmModel, para el modelo de datos, que se suministra al delegado como una instancia de IEdmModel. Para obtener más información, vea la entrada de blog Vocabularios en WCF Data Services. |
|
Le permite deshabilitar la validación del modelo de datos antes de que el servicio responda a una solicitud al extremo $metadata. |
|
Permite exponer un tipo de datos en los metadatos para un proveedor de metadatos dinámico definido mediante la interfaz IDataServiceMetadataProvider. |
|
Le permite especificar si el motor en tiempo de ejecución del servicio de datos debe convertir el tipo contenido en la carga al tipo de propiedad real que se especifica en la solicitud. |
|
Le permite especificar si los elementos link que direccionan específicamente la relación entre entidades, también denominados asociaciones, se incluyen en la respuesta del servicio de datos. Las asociaciones se direccionan mediante el operador $links. Para obtener más información, vea 3.2. Direccionar vínculos entre entradas en el protocolo OData. El servicio de datos siempre devuelve los elementos link que direccionan entidades relacionadas, incluso cuando IncludeAssociationLinksInResponse es false. |
|
Permite especificar si se invocan o no interceptores de cambio registrados en las entidades relacionadas cuando se elimina un vínculo de relación entre dos entidades. |
|
Permite limitar el número de conjuntos de cambios y operaciones de consulta que se permiten en un solo lote. Para obtener más información, vea OData: Batch y Realizar operaciones por lotes (WCF Data Services). |
|
Permite limitar el número máximo de cambios que se pueden incluir en un solo conjunto de cambios. Para obtener más información, vea Como: Habilitar la paginación de los resultados del servicio de datos (WCF Data Services). |
|
Permite limitar el tamaño de una respuesta limitando el número de entidades relacionadas que pueden incluirse en una sola solicitud utilizando el operador de consulta $expand. Para obtener más información, vea vea OData: convenciones de URI y Cargar contenido aplazado (WCF Data Services). |
|
Permite limitar el tamaño de una respuesta limitando la profundidad del gráfico de las entidades relacionadas que pueden incluirse en una sola solicitud usando el operador de consulta $expand. Para obtener más información, vea vea OData: convenciones de URI y Cargar contenido aplazado (WCF Data Services). |
|
Permite limitar el número de entidades que se van a insertar que puede contener una sola solicitud POST. |
|
Define la versión del protocolo Atom utilizado por el servicio de datos. Cuando el valor de la propiedad MaxProtocolVersion se establece en un valor menor que el valor máximo de DataServiceProtocolVersion, la funcionalidad más reciente de Servicios de datos de Microsoft WCF no está disponible para los clientes que tengan acceso al servicio de datos. Para obtener más información, vea Control de versiones del servicio de datos (Servicios de datos de Microsoft WCF). |
|
Le permite limitar el tamaño de una respuesta limitando el número de entidades de cada conjunto de entidades que se devuelve como fuente de distribución de datos. |
|
Agrega un tipo de datos a la lista de tipos reconocidos por el servicio de datos. |
|
Establece los derechos de acceso para los recursos del conjunto de entidades que están disponibles en el servicio de datos. Se puede proporcionar el valor asterisco (* para el parámetro de nombre para establecer el acceso en el mismo nivel para todos los conjuntos de entidades restantes. Se recomienda establecer el acceso a los conjuntos de entidades para proporcionar el acceso con privilegios mínimos a los recursos del servicio de datos requeridos por las aplicaciones cliente. Para obtener más información, vea Proteger WCF Data Services. Para obtener ejemplos de los derechos de acceso mínimos requeridos para una acción HTTP y un URI determinado, vea la tabla de la sección Minimum Resource Access Requirements. |
|
Establece el tamaño de página máximo de un recurso de conjunto de entidades. Para obtener más información, vea Como: Habilitar la paginación de los resultados del servicio de datos (WCF Data Services). |
|
Establece los derechos de acceso para las acciones de servicio definidas en el servicio de datos. Para obtener más información, vea Usar acciones OData para implementar el comportamiento del lado servidor. Se puede proporcionar el valor asterisco (*) para el parámetro name con el fin de establecer el acceso en el mismo nivel para todas las acciones de servicio. Se recomienda establecer el acceso a las acciones de servicio para proporcionar el acceso con privilegios mínimos a los recursos del servicio de datos que las aplicaciones cliente necesitan. Para obtener más información, vea Proteger WCF Data Services. |
|
Establece los derechos de acceso para las operaciones de servicio definidas en el servicio de datos. Para obtener más información, vea Operaciones de servicio (WCF Data Services). Se puede proporcionar el valor asterisco (*) para el parámetro name con el fin de establecer el acceso en el mismo nivel para todas las operaciones de servicio. Se recomienda establecer el acceso a las operaciones de servicio para proporcionar el acceso con privilegios mínimos a los recursos del servicio de datos requeridos por las aplicaciones cliente. Para obtener más información, vea Proteger WCF Data Services. |
|
Esta propiedad de configuración le permite solucionar más fácilmente los problemas de un servicio de datos devolviendo más información en el mensaje de respuesta del error. Esta opción no está pensada para su uso en un entorno de producción. Para obtener más información, vea Desarrollar e implementar WCF Data Services. |
Requisitos mínimos de acceso a recursos
En la siguiente tabla se detallan los derechos mínimos del conjunto de entidades que se deben conceder para ejecutar una operación concreta. Los ejemplos de ruta de acceso se basan en el servicio de datos de Northwind que se crea al completar el tutorial rápido. Puesto que las enumeraciones EntitySetRights y ServiceOperationRights se definen usando la clase FlagsAttribute, puede usar un operador OR lógico con el fin de especificar varios permisos para una operación o un conjunto de entidades únicos. Para obtener más información, vea Cómo: Habilitar el acceso al servicio de datos (WCF Data Services).
Ruta de acceso de URI y opción de consulta |
GET |
DELETE |
MERGE |
POST |
PUT |
---|---|---|---|---|---|
/Customers |
No admitido |
No admitido |
No admitido |
||
/Customers('ALFKI') |
no disponible |
||||
/Customers('ALFKI')/Orders |
Customers: ReadSingle -y- Orders: ReadMultiple |
No se admite |
No se admite |
Customers: ReadSingle y WriteMerge o WriteReplace -y- Orders: y WriteAppend |
No se admite |
/Customers('ALFKI')/Orders(10643) |
Customers: ReadSingle -y- Orders: ReadSingle |
Customers: ReadSingle -y- Orders: ReadSingle y WriteDelete |
Customers: ReadSingle -y- Orders: ReadSingle y WriteMerge |
No se admite |
Customers: ReadSingle -y- Orders: ReadSingle y WriteReplace |
/Orders(10643)/Customer |
Customers: ReadSingle -y- Orders: ReadSingle |
Customers: ReadSingle y WriteDelete -y- Orders: ReadSingle |
Customers: ReadSingle y WriteMerge; -y- Orders: ReadSingle |
Customers: WriteAppend -y- Orders: WriteAppend y ReadSingle |
No se admite |
/Customers('ALFKI')/$links/Orders |
Customers: ReadSingle -y- Orders: ReadMultiple |
No se admite |
No se admite |
Customers: ReadSingle y WriteMerge o WriteReplace -y- Orders: ReadSingle |
No se admite |
/Customers('ALFKI')/$links/Orders(10643) |
Customers: ReadSingle -y- Orders: ReadSingle |
Customers: ReadSingle y WriteMerge o WriteReplace -y- Orders: ReadSingle |
No se admite |
No se admite |
No se admite |
/Orders(10643)/$links/Customer |
Customers: ReadSingle -y- Orders: ReadSingle |
Orders: ReadSingle y WriteMerge o WriteReplace |
Customers: ReadSingle -y- Orders: ReadSingle y WriteMerge |
No se admite |
Customers: ReadSingle; - y - Orders: ReadSingle y WriteReplace |
/Customers/$count |
No admitido |
No se admite |
No admitido |
No admitido |
|
/Customers('ALFKI')/ContactName |
No admitido |
No se admite |
|||
/Customers('ALFKI')/Address/StreetAddress/$value1 |
No admitido |
No se admite |
No admitido |
||
/Customers('ALFKI')/ContactName/$value |
No admitido |
||||
/Customers('ALFKI')/$value2 |
No admitido |
No se admite |
No admitido |
||
/Customers?$select=Orders/*&$expand=Orders |
Customers: ReadSingle - y - Orders: ReadMultiple |
No admitido |
No se admite |
Customers: WriteAppend |
No admitido |
/Customers('ALFKI')?$select=Orders/*&$expand=Orders |
Customers: ReadSingle - y - Orders: ReadMultiple |
No se admite |
No se admite |
No se admite |
No admitido |
1 En este ejemplo, Address representa una propiedad de tipo complejo de la entidad Customers que tiene una propiedad denominada StreetAddress. El modelo utilizado por los servicios de datos de Northwind no define este tipo complejo explícitamente. Cuando el modelo de datos se define con el proveedor de Entity Framework, puede usar las herramientas de Entity Data Model para definir este tipo complejo. Para obtener más información, vea How to: Create and Modify Complex Types (Entity Data Model Tools).
2 Se admite este URI cuando una propiedad que devuelve un objeto binario grande (BLOB) se define como el recurso multimedia que pertenece a una entidad que es una entrada de vínculo multimedia que, en este caso, es Customers. Para obtener más información, vea Proveedores de transmisión por secuencias (WCF Data Services).
Requisitos de control de versiones
Los siguientes comportamientos de configuración del servicio de datos requieren la versión 3 del protocolo OData o versiones posteriores:
Compatibilidad para incluir elementos de vínculo de relación en la fuente de respuesta.
Compatibilidad con los operadores de consulta any y all.
Compatibilidad para definir acciones de servicio y funciones.
Compatibilidad con tipos de datos espaciales.
Compatibilidad con vocabularios mediante la definición de anotaciones del modelo de datos.
Compatibilidad para deshabilitar la validación del modelo de datos para una solicitud de extremo $metadata.
Los siguientes comportamientos de configuración del servicio de datos requieren la versión 2 del protocolo OData o versiones posteriores:
La compatibilidad con solicitudes de recuento y proyección de consultas necesita la versión 2.0 del protocolo OData y versiones posteriores.
La compatibilidad con la opción de consulta $select para la proyección necesita la versión 2.0 del protocolo OData y versiones posteriores.
Para obtener más información, vea Control de versiones del servicio de datos (Servicios de datos de Microsoft WCF).
Vea también
Conceptos
Hospedar el servicio de datos (WCF Data Services)