Tutorial: crear una solución de RIA Services

En este tutorial, creará una aplicación de WCF RIA Services que recupera datos de la base de datos AdventureWorksLT y, a continuación, la pondrá a disposición de un cliente de Silverlight donde se presentará. El acceso a los datos del origen de datos se obtiene creando clases de entidad que representan diversas tablas de base de datos en el servidor del nivel intermedio para presentarlo después creando un servicio de dominio que hace que estas entidades de nivel intermedio sean accesibles al cliente de Silverlight. Este tutorial sirve de punto de partida para gran número de los demás tutoriales en la documentación de RIA Services .

Requisitos previos

Este tutorial y los demás tutoriales presentados en la documentación de RIA Services requieren la instalación y configuración correctas de varios programas de requisitos previos, como Visual Studio 2010 y Silverlight Developer Runtime y SDK, además de WCF RIA Services y el Kit de herramientas de WCF RIA Services. También requieren la instalación y configuración de SQL Server 2008 R2 Express con Advanced Services, así como la instalación de las bases de datos OLTP y LT de AdventureWorks.

Los temas del nodo Requisitos previos para WCF RIA Services proporcionan instrucciones detalladas para el cumplimiento de cada uno de estos requisitos previos. Siga las instrucciones proporcionadas en ellos antes de realizar este tutorial para asegurarse de encontrar el menor número de problemas posibles al trabajar en estos tutoriales de RIA Services .

Crear una solución con un vínculo a RIA Services entre los proyectos

Para configurar una solución de RIA Services

  1. Cree un nuevo proyecto de RIA Services en Visual Studio 2010 seleccionando Archivo, Nuevo y, a continuación, Proyecto.

    Aparece el cuadro de diálogo Nuevo proyecto.

  2. Seleccione la plantilla Aplicación de Silverlight del grupo Silverlight de las Plantillas instaladas y asigne al nuevo proyecto el nombre RIAServicesExample.

    RIA_StartProject

  3. Haga clic en Aceptar.

    Aparece el cuadro de diálogo Nueva aplicación de Silverlight.

  4. Active la casilla Habilitar WCF RIA Services situada cerca de la parte inferior del cuadro de diálogo. La activación de esta casilla crea un vínculo a RIA Services entre el proyecto de cliente y el proyecto de servidor.

    RIA_CreateProjectwithLink

  5. Haga clic en Aceptar para crear la solución.

    La solución contiene dos proyectos: un proyecto de cliente y un proyecto de servidor. El proyecto de cliente se denomina RIAServicesExample y contiene el código de Silverlight que se utiliza para crear el nivel de presentación. El proyecto de servidor se denomina RIAServicesExample.Web y contiene el código de nivel intermedio.

    RIA_ProjectsCreated

Crear modelos de datos

En esta sección, creará las clases de ADO.NET Entity que representan datos de la base de datos AdventureWorksLT. RIA Services trabaja con una variedad de clases de modelado de datos y orígenes de datos. Para obtener más información sobre las opciones para tener acceso a datos con RIA Services , vea el tema Datos.

Precaución:
Al utilizar un Entity Data Model (EMD) con Visual Studio 2010, debe seleccionar la opción Incluir columnas de clave externa en el modelo. De forma predeterminada, esta opción se selecciona cuando se utiliza el Asistente para Entity Data Model. También se debe utilizar el comportamiento predeterminado de incrustación de la información de asignación de EMD en el ensamblado.

Para que los datos estén disponibles en el nivel intermedio

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto de servidor, RIAServicesExample.Web, seleccione Agregar y, a continuación, Nuevo elemento.

    Aparece el cuadro de diálogo Agregar nuevo elemento.

  2. En la lista de categorías, seleccione Datos y, a continuación, seleccione la plantilla Entity Data Model de ADO.NET.

  3. Asigne al nuevo archivo el nombre AdventureWorksModel.edmx y haga clic en Agregar.

    Aparecerá el Asistente para Entity Data Model.

  4. En la pantalla Elegir contenido de Model, seleccione la opción Generar desde la base de datos y haga clic en Siguiente.

  5. En la pantalla Elegir la conexión de datos, cree una conexión de datos con la base de datos y haga clic en Siguiente.

  6. En la pantalla Elija los objetos de base de datos, seleccione las tablas Address, Customer y CustomerAddress.

  7. Confirme que la casilla Incluir columnas de clave externa en el modelo está activada de forma predeterminada y haga clic en Finalizar.

    Se crean modelos de entidad para las tablas.

  8. Genere (con la combinación de teclas Ctrl+Mayús+B) la solución.

Crear un servicio de dominio

En esta sección, agregará un servicio de dominio al proyecto de nivel intermedio. Un servicio de dominio expone las entidades y operaciones de datos del proyecto de servidor en el proyecto de cliente. Puede agregar lógica de negocios al servicio de dominio para administrar cómo el cliente interactúa con los datos.

Para crear el servicio de dominio

  1. Haga clic con el botón secundario en el proyecto de servidor, seleccione Agregar y, a continuación, Nuevo elemento.

  2. En la lista de categorías, seleccione Web y, a continuación, seleccione la plantilla Clase de servicio de dominio.

  3. Asigne a la clase el nombre CustomerDomainService.cs (o CustomerDomainService.vb).

  4. Haga clic en Agregar.

    Aparece el cuadro de diálogo Agregar nueva clase de servicio de dominio.

  5. Asegúrese de que esté activada la casilla Habilitar acceso de cliente.

  6. Seleccione la entidad Customer y, a continuación, active la casilla Habilitar edición correspondiente.

  7. Haga clic en Aceptar.

    Se genera la clase CustomerDomainService en un nuevo archivo CustomerDomainService.cs (o CustomerDomainService.vb).

  8. Abra este archivo. Observe que el archivo tiene las siguientes características:

    • La clase CustomerDomainService deriva de la clase LinqToEntitiesDomainService, que es una clase base abstracta en el marco de RIA Services . Esta clase base se utilizó automáticamente porque el servicio de dominio expone una clase de datos de ADO.NET Entity.

    • La clase base genérica se enlaza a la clase de entidad creada en pasos anteriores por el elemento AdventureWorksLTEntities de tipo ObjectContext en su parámetro genérico.

    • La clase CustomerDomainService se marca con el atributo EnableClientAccessAttribute para indicar que está visible para el nivel de cliente.

    • Se genera un método de consulta denominado GetCustomers. Este método devuelve todos los elementos sin ningún tipo de filtrado u ordenación.

    • Se han generado métodos para insertar, actualizar y eliminar clientes en los registros.

Crear el cliente de Silverlight

En otros tutoriales, se mostrará cómo agregar lógica de negocios al servicio de dominio. En este tutorial, utilizará simplemente el método GetCustomers generado de forma predeterminada.

Se crearon clases de proxy de cliente cuando se generó la solución. El vínculo a RIA Services que se estableció entre el proyecto de cliente y el proyecto de servidor hace posible esta generación de código. Estas clases de proxy cliente proporcionan acceso a los datos del cliente.

Para ver las clases de proxy de cliente generadas

  1. Genere la solución.

    Cuando genere la solución, se generará código en el proyecto de cliente.

  2. En el Explorador de soluciones, seleccione el proyecto de cliente RIAServicesExample y haga clic en el icono Mostrar todos los archivos situado en la parte superior de la ventana.

    Observe que la carpeta Generated_Code contiene un archivo RIAServicesExample.Web.g.cs (o RIAServicesExample.Web.g.vb).

  3. Abra el archivo de código en la carpeta Generated_Code.

    Observe que el archivo tiene las siguientes características:

    • Se genera una clase WebContext que deriva de la clase WebContextBase.

    • Se genera una clase CustomerDomainContext que deriva de la clase DomainContext. Esta clase tiene un método denominado GetCustomersQuery que corresponde al método de consulta creado en el servicio de dominio.

    • Se genera una clase Customer que deriva de la clase Entity para la entidad expuesta por el servicio de dominio. La clase de entidad Customer del proyecto de cliente coincide con la entidad Customer en el servidor.

Para mostrar los datos en el cliente de Silverlight

  1. Abra MainPage.xaml.

  2. Desde el Cuadro de herramientas situado a la izquierda, arrastre un control DataGrid hasta el interior del elemento Grid en la vista XAML.

    La acción de arrastrar el control DataGrid desde el Cuadro de herramientas hace que se agreguen automáticamente una instrucción using System.Windows.Controls de espacio de nombres y una referencia a un ensamblado System.Windows.Controls.Data.

    Precaución:
    Si agrega el control DataGrid sin arrastrarlo desde el Cuadro de herramientas, debe agregar manualmente al proyecto de cliente la referencia al ensamblado System.Windows.Controls.Data y la instrucción "using" en el archivo de código subyacente.
  3. Cambie el valor de AutoGeneratedColums a True, asigne al elemento DataGrid el nombre CustomerGrid y ajuste los atributos de ancho y alto como se muestra en el código XAML siguiente.

    <UserControl 
        xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  
        x:Class="RIAServicesExample.MainPage"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
    
        <Grid x:Name="LayoutRoot" Background="White">
          <data:DataGrid Name="CustomerGrid"></data:DataGrid>
        </Grid>
    </UserControl>
    
  4. Abra el código subyacente para MainPage.xaml.

  5. Agregue dos instrucciones Imports (Visual Basic) o using (C#): using RIAServicesExample.Web; y using System.ServiceModel.DomainServices.Client;.

    El espacio de nombres RIAServicesExample.Web es el espacio de nombres que contiene el código generado para el proyecto de cliente en RIAServicesExample.Web.g.cs (o RIAServicesExample.Web.g.vb).

  6. Para crear una instancia del elemento CustomerDomainContext, agregue la línea de código private CustomerDomainContext _customerContext = new CustomerDomainContext(); en la clase MainPage.

    Imports System.ServiceModel.DomainServices.Client
    Imports RIAServicesExample.Web
    
    Partial Public Class MainPage
        Inherits UserControl
    
        Private _customerContext As New CustomerDomainContext
    
        Public Sub New()
            InitializeComponent()
    
            Dim loadOp = Me._customerContext.Load(Me._customerContext.GetCustomersQuery())
            CustomerGrid.ItemsSource = loadOp.Entities
        End Sub
    
    End Class
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using RIAServicesExample.Web;
    using System.ServiceModel.DomainServices.Client;
    
    namespace RIAServicesExample
    {
        public partial class MainPage : UserControl
        {
            private CustomerDomainContext _customerContext = new CustomerDomainContext();
    
            public MainPage()
            {
                InitializeComponent();
    
                LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());
                CustomerGrid.ItemsSource = loadOp.Entities;
            }
        }
    }
    
  7. Recupere las entidades Customer llamando al método GetCustomersQuery con LoadOperation: LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());.

  8. Enlace las entidades cargadas al control DataGrid con CustomerGrid.ItemsSource = loadOp.Entities;.

    En resumen, el archivo MainPage.xaml.cs debe contener ahora el código siguiente:

    //Namespaces added
    using RIAServicesExample.Web;
    using System.ServiceModel.DomainServices.Client;
    
    
    namespace RIAServicesExample
    {
        public partial class MainPage : UserControl
        {
            private CustomerDomainContext _customerContext = new CustomerDomainContext();
            public MainPage()
            {
                InitializeComponent();
    
                LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());
                CustomerGrid.ItemsSource = loadOp.Entities;
            }
        }
    }
    
  9. Ejecute (F5) la aplicación.

    Debe ver una cuadrícula de datos similar a la siguiente.

Pasos siguientes

Este tutorial ha mostrado solo los pasos básicos para crear un proyecto y recuperar datos sin filtrar de un servicio de dominio. Estas son algunas sugerencias para el aprendizaje sobre otras capacidades:

  • Cree métodos de consulta personalizados, como consultas que aceptan un parámetro, que se utilizan normalmente para filtrar datos. Para obtener más información, vea Tutorial: agregar métodos de consulta.

  • Agregue lógica de negocios a un servicio de dominio que contenga métodos de actualización, inserción y eliminación, y que administre el proceso para modificar los datos. Para obtener más información, vea Agregar lógica de negocios al servicio de dominio.