Inicio rápido del servicio de datos (marco de trabajo de los servicios de datos de ADO.NET)

Al seguir los procedimientos de este tema, usará los servicios de datos de ADO.NET para crear y probar un servicio de datos que se conecta a la base de datos de ejemplo Northwind.

Para crear este servicio de datos de ejemplo, en primer lugar asegúrese de que se han instalado en el equipo los componentes necesarios, enumerados en la sección Requisitos previos de este tema. Para crear este servicio de datos, siga este proceso:

  1. Cree una aplicación Web ASP.NET.

  2. Cree el modelo de datos de entidades (Entity Data Model, EDM) y conecte este modelo a la base de datos.

  3. Cree el servicio de datos en la aplicación web.

  4. Habilite el acceso al servicio de datos.

Después de crear y habilitar el servicio de datos mediante estos procedimientos, puede probar el servicio de datos de ejemplo que ha implementado.

Requisitos previos

Para utilizar el marco de trabajo de los servicios de datos de ADO.NET con el fin de crear un servicio de datos, tienen que estar instalados los componentes siguientes en el equipo:

  • Servicios de datos de ADO.NET y ADO.NET Entity Framework. Los dos se instalan al instalar Microsoft .NET Framework 3.5 Service Pack 1 (SP1) o versiones posteriores.

    El marco de trabajo de los servicios de datos de ADO.NET consta de componentes de tiempo de ejecución y de acceso a datos. El componente de tiempo de ejecución implementa la conversión de URI, los formatos de transporte AtomPub y JSON y el protocolo de interacción. El componente de acceso a datos admite la comunicación entre componentes mediante la interfaz IQueryable<T>. Un conjunto de convenciones asigna los tipos de Common Language Runtime (CLR) a la sintaxis de URI y a los protocolos de carga que los servicios de datos de ADO.NET usan.

  • Herramientas de Entity Framework. Esas herramientas están incluidas en Visual Studio 2008 Service Pack 1 (SP1).

  • Proveedores de acceso a datos de ADO.NET. Cualquier versión de Microsoft SQL Server 2005 admite estos proveedores. Esto incluye SQL Server Express.

  • Base de datos de ejemplo Northwind. Para descargar esta base de ejemplo, vea la página de descarga Ejemplo de bases de datos de SQL Server (en inglés).

Crear la aplicación Web ASP.NET

Los servicios de datos de ADO.NET son una versión especializada de los servicios Windows Communication Foundation. Los servicios de datos de ADO.NET se ejecutan en los sitios de ASP.NET.

Si todavía tiene una aplicación web ASP.NET y prefiere agregar el servicio de datos de ejemplo a esta aplicación ya existente, puede omitir los pasos siguientes y pasar a la sección siguiente, "Crear el modelo de datos de entidades".

Nota

En el procedimiento siguiente se usan las versiones Standard, Professional y Team System de Visual Studio 2008 SP1. Si usa Visual Studio Web Developer, tendrá que crear un nuevo sitio web en lugar de una nueva aplicación web.

  1. En Visual Studio, en el menú Archivo, seleccione Nuevo y, a continuación, seleccione Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, seleccione Visual Basic o Visual C# como el lenguaje de programación.

  3. En el panel Plantillas, seleccione Aplicación web ASP.NET.

  4. Escriba un nombre para el proyecto, como SimpleDataService.

  5. Haga clic en Aceptar.

Crear el modelo de datos de entidades

Para crear un EDM basándose en una base de datos relacional con ADO.NET Entity Framework:

  1. En el Explorador de soluciones, haga clic con el botón secundario en el nombre del proyecto de ASP.NET que acaba de crear y, a continuación, haga clic en Agregar nuevo elemento.

  2. En el cuadro de diálogo Agregar nuevo elemento, seleccione Modelo de datos de entidad de ADO.NET.

  3. En el nombre del modelo de datos, escriba Northwind.

    Northwind.edmx es el nombre de archivo del modelo de datos creado mediante el Asistente para Entity Data Model. El esquema del modelo de datos que se va a crear se asigna de forma individualizada a la base de datos de ejemplo Northwind.

  4. En el Asistente para Entitiy Data Model, seleccione Generar desde la base de datos y, a continuación, haga clic en Siguiente.

  5. Para conectar el modelo de datos a la base de datos efectúe uno de los pasos siguientes y después haga clic en Siguiente:

    • Si no tiene una conexión de base de datos ya configurada, haga clic en Nueva conexión y cree una conexión nueva.

      Nota

      Si utiliza SQL Server 2005, le recomendamos que establezca la opción MultipleActiveResultSets en true. Si esta opción no está establecida en true en la cadena de conexión, en el cuadro de diálogo Propiedades de conexión, haga clic en Avanzadas y después busque la opción MultipleActiveResultSets y establézcala en true.

      O bien

    • Si tiene una conexión de base de datos ya configurada para conectarse a la base de datos Northwind, seleccione esa conexión de la lista de conexiones.

  6. En la página final del asistente, seleccione las casillas de todas las tablas de la base de datos y desactive las casillas correspondientes a las vistas y procedimientos almacenados.

    La página final del asistente muestra una lista de las tablas, vistas y procedimientos almacenados disponibles en la base de datos. Para conservar el modelo de datos creado en el ejemplo de este tema, seleccione solo las tablas.

  7. Haga clic en Finalizar para cerrar el asistente.

El asistente genera los archivos que representan los metadatos de la base de datos y agrega los archivos al proyecto.

Crear el servicio de datos

Al crear un servicio de datos ADO.NET se implementa el modelo de datos creado en los pasos anteriores como un servicio al que se tiene acceso mediante el protocolo Internet.

Para crear el servicio de datos:

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nombre del proyecto de ASP.NET y, a continuación, seleccione Agregar nuevo elemento.

  2. En el cuadro de diálogo Agregar nuevo elemento, seleccione Servicio de datos ADO.NET.

    Nota

    Asegúrese de seleccionar Servicio de datos ADO.NET, no otras opciones similares, como Servicio web.

  3. En el nombre del servicio, escriba Northwind.

    Visual Studio crea los archivos de código y marcado XML para el nuevo servicio. De forma predeterminada, se abre la ventana del editor de código. En el Explorador de soluciones, el servicio tendrá el nombre, Northwind, con la extensión .svc.cs o .svc.vb.

  4. Al principio del código del servicio de datos, efectúe uno de los pasos siguientes para incluir el espacio de nombres de las clases del modelo de datos que el Asistente para Entity Data Model ha generado:

    • Si la aplicación ASP.NET usa Visual Basic, agregue una instrucción imports.

    • Si la aplicación ASP.NET usa C#, agregue una instrucción using.

    El explorador de objetos de Visual Studio muestra el espacio de nombres derivado de la base de datos que el servicio de datos usa. En este ejemplo, la base de datos se llama Northwind y el espacio de nombres se llama NorthwindModel.

  5. En el código del servicio de datos, busque el comentario "TODO" y reemplácelo por el nombre de la clase generada por el Asistente para Entity Data Model.

    En este ejemplo, el nombre de la clase generada por el Asistente para Entity Data Model es NorthwindEntities en el espacio de nombres NorthwindModel.

Habilitar el acceso al servicio de datos

De forma predeterminada, el servicio de datos no permite el acceso a ningún recurso. Se debe habilitar explícitamente el acceso antes de que el servicio de datos pueda devolver datos.

Para habilitar el acceso de lectura y escritura a todos los recursos asociados al servicio, encuentre la función InitializeService de la clase derivada de DataService. Para esta función, agregue el código necesario para establecer los derechos a recursos del contenedor en Todos. En C#, agregue la línea config.SetResourceContainerAccessRule("*", ResourceContainerRights.All) a la función InitializeService, como se muestra a en el siguiente código:

using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
using NorthwindModel;

namespace SimpleDataService
{
    public class Northwind : DataService< NorthwindModel.NorthwindEntities >
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(IDataServiceConfiguration config)
        {
            // TODO: set rules to indicate which entity sets and
           // service operations are visible and updatable. 
           // Use *(all sets) only for testing.
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);

        }
    }
}

Ahora, puede ejecutar el servicio desde Visual Studio. Presione F5 para iniciar el servidor web de desarrollo. En la sección siguiente se explica cómo se utiliza el servicio de datos recién creado.

Probar el servicio de datos

Para este ejemplo, use un explorador web para interactuar con el servicio de datos. Un explorador web es un modo sencillo de experimentar con la sintaxis de direccionamiento de solicitudes y ver los resultados. No obstante, un explorador web no es el método que la mayoría de las aplicaciones usan para interactuar con el servicio de datos cuando finaliza y está en uso. Habitualmente, las aplicaciones interactúan con el servicio de datos mediante el código o los lenguajes de script.

Nota

Para obtener más información acerca de la sintaxis HTTP usada por los servicios de datos de ADO.NET, vea Esquema de direccionamiento simple de datos con identificadores uniformes de recursos (URI) (marco de trabajo de los servicios de datos de ADO.NET) y Aplicaciones cliente de los servicios de datos de ADO.NET.

Recuperar el documento de servicio predeterminado

De forma predeterminada, el documento XML que el servicio de datos devuelve es un documento de servicio AtomPub. AtomPub es el método de serialización predeterminado. Para obtener más información acerca del protocolo ATOM, vea el sitio del equipo de servicios de datos de ADO.NET.

Para solicitar el documento de servicio predeterminado:

  • Abra un explorador web y, a continuación, especifique un URI como el siguiente, y sustituya el número de puerto para que coincida con su entorno de desarrollo:

    https://localhost:50781/northwind.svc

Si se han establecido las reglas de acceso de acuerdo al URI anterior, el servicio de datos devuelve el documento de servicio predeterminado al explorador. Este documento de servicio predeterminado contiene una lista de conjuntos de entidades que representan los datos de Northwind que el servicio de datos implementa. Este documento de servicio predeterminado será similar al ejemplo de código XML siguiente:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
<service xml:base="https://localhost:1365/Northwind.svc/" 
xmlns:atom="http://www.w3.org/2005/Atom" 
xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
<workspace>
 <atom:title>Default</atom:title> 
<collection href="Categories">
 <atom:title>Categories</atom:title> 
 </collection>
<collection href="CustomerDemographics">
 <atom:title>CustomerDemographics</atom:title> 
 </collection>
<collection href="Customers">
 <atom:title>Customers</atom:title> 
 </collection>
<collection href="Employees">
 <atom:title>Employees</atom:title> 
 </collection>
<collection href="Order_Details">
 <atom:title>Order_Details</atom:title> 
 </collection>
<collection href="Orders">
 <atom:title>Orders</atom:title> 
 </collection>
<collection href="Products">
 <atom:title>Products</atom:title> 
 </collection>
<collection href="Region">
 <atom:title>Region</atom:title> 
 </collection>
<collection href="Shippers">
 <atom:title>Shippers</atom:title> 
 </collection>
<collection href="Suppliers">
 <atom:title>Suppliers</atom:title> 
 </collection>
<collection href="Territories">
 <atom:title>Territories</atom:title> 
 </collection>
 </workspace>
 </service>

Recuperar un conjunto de entidades

Para examinar el contenido del servicio de datos, use los conjuntos de entidades del documento de servicio predeterminado como punto de partida. Por ejemplo, algunos de los conjuntos de entidades del documento de servicio predeterminado del servicio de datos de ejemplo incluyen Products, Shippers y Territories. Podría devolver fácilmente todas las entidades en uno de estos conjuntos de entidades.

Para solicitar una lista de productos

  • En el explorador web, escriba el URI siguiente:

    https://localhost/northwind.svc/Products

Al agregar /Products al URI, este último devuelve todos los productos del almacenamiento. El código XML siguiente muestra los cuatro primeros productos devueltos, que es una lista parcial de los resultados:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="https://localhost:1365/Northwind.svc/" xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Products</title>
  <id>https://localhost:1365/Northwind.svc/Products</id>
  <updated>2008-05-22T16:42:14Z</updated>
  <link rel="self" title="Products" href="Products" />
  <entry m:type="NorthwindModel.Products">
    <id>https://localhost:1365/Northwind.svc/Products(1)</id>
    <title type="text"></title>
    <updated>2008-05-22T16:42:14Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Products" href="Products(1)" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
       type="application/atom+xml;type=entry" title="Categories" href="Products(1)/Categories" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
       type="application/atom+xml;type=feed" title="Order_Details" href="Products(1)/Order_Details" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers" 
       type="application/atom+xml;type=entry" title="Suppliers" href="Products(1)/Suppliers" />
    <content type="application/xml">
      <m:properties>
        <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
        <d:ProductID m:type="Edm.Int32">1</d:ProductID>
        <d:ProductName>Chai</d:ProductName>
        <d:QuantityPerUnit>10 boxes x 20 bags</d:QuantityPerUnit>
        <d:ReorderLevel m:type="Edm.Int16">10</d:ReorderLevel>
        <d:UnitPrice m:type="Edm.Decimal">18.0000</d:UnitPrice>
        <d:UnitsInStock m:type="Edm.Int16">36</d:UnitsInStock>
        <d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
      </m:properties>
    </content>
  </entry>
  <entry m:type="NorthwindModel.Products">
    <id>https://localhost:1365/Northwind.svc/Products(2)</id>
    <title type="text"></title>
    <updated>2008-05-22T16:42:14Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Products" href="Products(2)" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
       type="application/atom+xml;type=entry" title="Categories" href="Products(2)/Categories" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
       type="application/atom+xml;type=feed" title="Order_Details" href="Products(2)/Order_Details" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers" 
       type="application/atom+xml;type=entry" title="Suppliers" href="Products(2)/Suppliers" />
    <content type="application/xml">
      <m:properties>
        <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
        <d:ProductID m:type="Edm.Int32">2</d:ProductID>
        <d:ProductName>Chang</d:ProductName>
        <d:QuantityPerUnit>24 - 12 oz bottles</d:QuantityPerUnit>
        <d:ReorderLevel m:type="Edm.Int16">25</d:ReorderLevel>
        <d:UnitPrice m:type="Edm.Decimal">19.0000</d:UnitPrice>
        <d:UnitsInStock m:type="Edm.Int16">28</d:UnitsInStock>
        <d:UnitsOnOrder m:type="Edm.Int16">40</d:UnitsOnOrder>
      </m:properties>
    </content>
  </entry>
  <entry m:type="NorthwindModel.Products">
    <id>https://localhost:1365/Northwind.svc/Products(3)</id>
    <title type="text"></title>
    <updated>2008-05-22T16:42:14Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Products" href="Products(3)" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
       type="application/atom+xml;type=entry" title="Categories" href="Products(3)/Categories" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
       type="application/atom+xml;type=feed" title="Order_Details" href="Products(3)/Order_Details" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers"
       type="application/atom+xml;type=entry" title="Suppliers" href="Products(3)/Suppliers" />
    <content type="application/xml">
      <m:properties>
        <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
        <d:ProductID m:type="Edm.Int32">3</d:ProductID>
        <d:ProductName>Aniseed Syrup</d:ProductName>
        <d:QuantityPerUnit>12 - 550 ml bottles</d:QuantityPerUnit>
        <d:ReorderLevel m:type="Edm.Int16">25</d:ReorderLevel>
        <d:UnitPrice m:type="Edm.Decimal">10.0000</d:UnitPrice>
        <d:UnitsInStock m:type="Edm.Int16">65</d:UnitsInStock>
        <d:UnitsOnOrder m:type="Edm.Int16">70</d:UnitsOnOrder>
      </m:properties>
    </content>
  </entry>
  <entry m:type="NorthwindModel.Products">
    <id>https://localhost:1365/Northwind.svc/Products(4)</id>
    <title type="text"></title>
    <updated>2008-05-22T16:42:14Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Products" href="Products(4)" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
       type="application/atom+xml;type=entry" title="Categories" href="Products(4)/Categories" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
       type="application/atom+xml;type=feed" title="Order_Details" href="Products(4)/Order_Details" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers" 
       type="application/atom+xml;type=entry" title="Suppliers" href="Products(4)/Suppliers" />
    <content type="application/xml">
      <m:properties>
        <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
        <d:ProductID m:type="Edm.Int32">4</d:ProductID>
        <d:ProductName>Chef Anton's Cajun Seasoning</d:ProductName>
        <d:QuantityPerUnit>48 - 6 oz jars</d:QuantityPerUnit>
        <d:ReorderLevel m:type="Edm.Int16">0</d:ReorderLevel>
        <d:UnitPrice m:type="Edm.Decimal">22.0000</d:UnitPrice>
        <d:UnitsInStock m:type="Edm.Int16">6</d:UnitsInStock>
        <d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
      </m:properties>
    </content>
  </entry>
  
</feed>

Recuperar una sola entidad

No solo puede devolver una lista de entidades de un conjunto de entidades, también puede solicitar una entidad concreta. El URI de una entidad individual consta del URI base del servicio seguido del nombre del conjunto de entidades y después el identificador final de la entidad. El identificador de la entidad es un valor de clave entre paréntesis.

Para solicitar el producto cuyo identificador es 1:

  • En el explorador web, escriba el URI siguiente:

    http://host/vdir/northwind.svc/Products(1)

El URI que acaba de especificar en el explorador recupera el producto con un identificador de 1. En el código XML siguiente se muestra el resultado de esta solicitud:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="https://localhost:1365/Northwind.svc/" 
xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
m:type="NorthwindModel.Products" xmlns="http://www.w3.org/2005/Atom">
  <id>https://localhost:1365/Northwind.svc/Products(1)</id>
  <title type="text"></title>
  <updated>2008-05-22T16:47:12Z</updated>
  <author>
    <name />
  </author>
  <link rel="edit" title="Products" href="Products(1)" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
     type="application/atom+xml;type=entry" title="Categories" href="Products(1)/Categories" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details"
     type="application/atom+xml;type=feed" title="Order_Details" href="Products(1)/Order_Details" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers" 
     type="application/atom+xml;type=entry" title="Suppliers" href="Products(1)/Suppliers" />
  <content type="application/xml">
    <m:properties>
      <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
      <d:ProductID m:type="Edm.Int32">1</d:ProductID>
      <d:ProductName>Chai</d:ProductName>
      <d:QuantityPerUnit>10 boxes x 20 bags</d:QuantityPerUnit>
      <d:ReorderLevel m:type="Edm.Int16">10</d:ReorderLevel>
      <d:UnitPrice m:type="Edm.Decimal">18.0000</d:UnitPrice>
      <d:UnitsInStock m:type="Edm.Int16">36</d:UnitsInStock>
      <d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
    </m:properties>
  </content>
</entry>

Recuperar una relación de entidad

En este servicio de datos de ejemplo, algunos de los valores son escalares, como ProductName y UnitPrice. Otros valores, como Categories y Suppliers, representan los extremos de las propiedades de navegación. Las propiedades de navegación son propiedades de acceso directo que buscan entidades relacionadas mediante una asociación de EDM.

Por ejemplo, la entidad Products incluye las asociaciones a entidades que representan Suppliers y Categories. Puede crear un URI que recorra estas relaciones.

Para solicitar el proveedor del producto cuyo identificador es 2:

  • En el explorador web, escriba el URI siguiente:

    http://host/vdir/northwind.svc/Products(2)/Suppliers

En el código XML siguiente se muestra el resultado de esta solicitud:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="https://localhost:1365/Northwind.svc/" 
xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
m:type="NorthwindModel.Suppliers" xmlns="http://www.w3.org/2005/Atom">
  <id>https://localhost:1365/Northwind.svc/Suppliers(1)</id>
  <title type="text"></title>
  <updated>2008-05-22T16:50:11Z</updated>
  <author>
    <name />
  </author>
  <link rel="edit" title="Suppliers" href="Suppliers(1)" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Products" 
     type="application/atom+xml;type=feed" title="Products" href="Suppliers(1)/Products" />
  <content type="application/xml">
    <m:properties>
      <d:Address>49 Gilbert St.</d:Address>
      <d:City>London</d:City>
      <d:CompanyName>Exotic Liquids</d:CompanyName>
      <d:ContactName>Charlotte Cooper</d:ContactName>
      <d:ContactTitle>Purchasing Manager</d:ContactTitle>
      <d:Country>UK</d:Country>
      <d:Fax m:null="true" />
      <d:HomePage m:null="true" />
      <d:Phone>(171) 555-2222</d:Phone>
      <d:PostalCode>EC1 4SD</d:PostalCode>
      <d:Region m:null="true" />
      <d:SupplierID m:type="Edm.Int32">1</d:SupplierID>
    </m:properties>
  </content>
</entry>

Vea también

Conceptos

Formato de URI de los recursos de direccionamiento (marco de trabajo de los servicios de datos de ADO.NET)
Requisitos HTTP comunes (marco de trabajo de los servicios de datos de ADO.NET)

Otros recursos

ADO.NET Entity Framework