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
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.
Seleccione la plantilla Aplicación de Silverlight del grupo Silverlight de las Plantillas instaladas y asigne al nuevo proyecto el nombre RIAServicesExample.
Haga clic en Aceptar.
Aparece el cuadro de diálogo Nueva aplicación de Silverlight.
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.
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.
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
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.
En la lista de categorías, seleccione Datos y, a continuación, seleccione la plantilla Entity Data Model de ADO.NET.
Asigne al nuevo archivo el nombre AdventureWorksModel.edmx y haga clic en Agregar.
Aparecerá el Asistente para Entity Data Model.
En la pantalla Elegir contenido de Model, seleccione la opción Generar desde la base de datos y haga clic en Siguiente.
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.
En la pantalla Elija los objetos de base de datos, seleccione las tablas Address, Customer y CustomerAddress.
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.
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
Haga clic con el botón secundario en el proyecto de servidor, seleccione Agregar y, a continuación, Nuevo elemento.
En la lista de categorías, seleccione Web y, a continuación, seleccione la plantilla Clase de servicio de dominio.
Asigne a la clase el nombre CustomerDomainService.cs (o CustomerDomainService.vb).
Haga clic en Agregar.
Aparece el cuadro de diálogo Agregar nueva clase de servicio de dominio.
Asegúrese de que esté activada la casilla Habilitar acceso de cliente.
Seleccione la entidad Customer y, a continuación, active la casilla Habilitar edición correspondiente.
Haga clic en Aceptar.
Se genera la clase
CustomerDomainService
en un nuevo archivo CustomerDomainService.cs (o CustomerDomainService.vb).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
Genere la solución.
Cuando genere la solución, se generará código en el proyecto de cliente.
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).
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 denominadoGetCustomersQuery
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 entidadCustomer
del proyecto de cliente coincide con la entidadCustomer
en el servidor.
Para mostrar los datos en el cliente de Silverlight
Abra MainPage.xaml.
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. Cambie el valor de
AutoGeneratedColums
a True, asigne al elementoDataGrid
el nombreCustomerGrid
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>
Abra el código subyacente para MainPage.xaml.
Agregue dos instrucciones
Imports
(Visual Basic) ousing
(C#):using RIAServicesExample.Web;
yusing 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).
Para crear una instancia del elemento
CustomerDomainContext
, agregue la línea de códigoprivate CustomerDomainContext _customerContext = new CustomerDomainContext();
en la claseMainPage
.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; } } }
Recupere las entidades Customer llamando al método
GetCustomersQuery
con LoadOperation:LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());
.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; } } }
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.