Tutorial: crear una biblioteca de clases de RIA Services

En este tutorial, aprenderá a crear una aplicación de Silverlight que incluye componentes reutilizables en una biblioteca de clases de WCF RIA Services.

La biblioteca de clases de WCF RIA Services permite crear lógica reutilizable de nivel intermedio y de nivel de presentación. Sin embargo, el uso de la biblioteca de clases de RIA Services es más complicado que la creación de una solución de RIA Services .

Para simplificar el ejemplo, este tutorial muestra la biblioteca de clases en la misma solución que la aplicación de Silverlight. La biblioteca de clases puede existir en una solución independiente.

Para obtener más información básica sobre las bibliotecas de clases de RIA Services , vea las secciones pertinentes del tema Crear soluciones de RIA Services.

[!NOTA] Si no necesita crear componentes reutilizables o si desea ver un tutorial más introductorio sobre la creación de una solución de RIA Services , vea Tutorial: crear una solución de RIA Services.

Requisitos previos

Este tutorial y los demás tutoriales presentados en la documentación de WCF 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 .

Para crear una solución de Silverlight que contenga una biblioteca de clases de WCF 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 ExampleSilverlightApp.

  3. En el cuadro de diálogo Nueva aplicación de Silverlight, no active la casilla Habilitar WCF RIA Services para la aplicación.

    La aplicación de Silverlight no necesita un vínculo a RIA Services entre el proyecto de Silverlight y el proyecto de servidor porque el vínculo a RIA Services existirá entre los proyectos en la biblioteca de clases.

  4. En el Explorador de soluciones, haga clic con el botón secundario en la solución, seleccione Agregar y, a continuación, seleccione Nuevo proyecto.

    Aparece el cuadro de diálogo Agregar nuevo proyecto.

  5. En las Plantillas instaladas de la categoría Silverlight, seleccione la plantilla Biblioteca de clases de WCF RIA Services y asígnele el nombre AdventureWorksClassLibrary.

  6. Haga clic en Aceptar.

    La solución contiene ahora cuatro proyectos como se muestra en la siguiente ilustración.

  7. Haga clic con el botón secundario en el proyecto ExampleSilverlightApp.Web y seleccione Agregar referencia.

    Aparece el cuadro de diálogo Agregar referencia.

  8. En la pestaña Proyectos, seleccione el proyecto AdventureWorksClassLibrary.Web y haga clic en Aceptar.

  9. Haga clic con el botón secundario en el proyecto ExampleSilverlightApp y seleccione Agregar referencia.

  10. En la pestaña Proyectos, seleccione el proyecto AdventureWorksClassLibrary y haga clic en Aceptar.

Para crear la biblioteca de nivel intermedio

  1. En el proyecto AdventureWorksClassLibrary.Web, agregue un Entity Data Model de ADO.NET denominado AdventureWorksModel.edmx. Para conocer los pasos sobre cómo realizar esta acción, vea Tutorial: crear una solución de RIA Services.

  2. En el Asistente para Entity Data Model, incluya la tabla Product en el modelo de entidad.

  3. Genere (Ctrl+Mayús+B) la solución.

  4. Haga clic con el botón secundario en el proyecto AdventureWorksClassLibrary.Web, seleccione Agregar y, a continuación, seleccione Nuevo elemento.

  5. Seleccione la plantilla Clase de servicio de dominio y asígnele el nombre ProductsDomainService.

  6. Haga clic en Agregar.

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

  7. Seleccione Producto en los modelos de datos disponibles para exponer mediante el servicio de dominio y haga clic en Aceptar.

  8. Genere (Ctrl+Mayús+B) la solución.

  9. En el Explorador de soluciones, seleccione Mostrar todos los archivos en cada proyecto.

    Observe que la carpeta Generated_Code solo existe en el proyecto AdventureWorksClassLibrary. Aunque no se generó ningún código para el proyecto ExampleSilverlightApp, puede seguir utilizando el código generado del proyecto AdventureWorksClassLibrary porque existe una referencia de proyecto entre los proyectos ExampleSilverlightApp y AdventureWorksClassLibrary.

Para utilizar el código generado en el proyecto de Silverlight

  1. Haga clic con el botón secundario en el proyecto ExampleSilverlightApp y seleccione Agregar referencia.

  2. Agregue una referencia al ensamblado System.ServiceModel.DomainServices.Client.

    Para encontrar el ensamblado, seleccione la pestaña .NET.

  3. En el proyecto ExampleSilverlightApp, abra MainPage.xaml.

  4. Desde el Cuadro de herramientas, arrastre un control DataGrid hasta el interior del elemento Grid.

    Se agregan un espacio de nombres XML y referencias a los ensamblados Data.

  5. Asigne a DataGrid el nombre ProductsGrid, como se muestra en el siguiente código XAML.

    <UserControl 
        xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  
        x:Class="ExampleSilverlightApp.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="ProductsGrid"></data:DataGrid>
        </Grid>
    </UserControl>
    
  6. Abra el código subyacente para MainPage.xaml.

  7. Agregue el código siguiente para recuperar los productos.

    Imports System.ServiceModel.DomainServices.Client
    Imports AdventureWorksClassLibrary.Web
    
    Partial Public Class MainPage
        Inherits UserControl
    
        Private _productContext As New ProductsDomainContext
    
        Public Sub New()
            InitializeComponent()
    
            Dim loadOp = Me._productContext.Load(Me._productContext.GetProductsQuery())
            ProductsGrid.ItemsSource = loadOp.Entities
        End Sub
    
    End Class
    
    using System.ServiceModel.DomainServices.Client;
    using AdventureWorksClassLibrary.Web;
    
    namespace ExampleSilverlightApp
    {
        public partial class MainPage : UserControl
        {
            private ProductsDomainContext _productContext = new ProductsDomainContext();
    
            public MainPage()
            {
                InitializeComponent();
    
                LoadOperation<Product> loadOp = this._productContext.Load(this._productContext.GetProductsQuery());
                ProductsGrid.ItemsSource = loadOp.Entities;
            }
        }
    }
    
  8. Abra el archivo App.Config en el proyecto AdventureWorksClassLibrary.Web y copie individualmente los elementos <connectionStrings>, <httpModules> y <system.serviceModel>, más los elementos que contienen. Pegue cada elemento de forma individual en el archivo Web.config del proyecto ExampleSilverlightApp.Web. El archivo Web.config será similar al del ejemplo siguiente, pero su archivo debe proporcionar la información de conexión pertinente para su entorno.

    <configuration>
        <connectionStrings>
            <add name="AdventureWorksLT2008Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
        </connectionStrings>
        <system.serviceModel>
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
        </system.serviceModel>
        <system.web>
            <compilation debug="true" targetFramework="4.0" />
        <httpModules>
        <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </httpModules>
        </system.web>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
    
    </configuration>
    
  9. Ejecute (F5) la aplicación.