Condividi tramite


Procedura dettagliata: creazione di una libreria di classi Servizi RIA

In questa procedura dettagliata viene illustrato come creare un'applicazione Silverlight che include componenti riutilizzabili nella libreria di classi WCF RIA Services.

La libreria di classi WCF RIA Services consente di creare la logica riutilizzabile del livello di presentazione e del livello intermedio. Tuttavia, l'utilizzo della libreria di classi RIA Services è più complicato della creazione di una soluzione RIA Services .

Per semplificare l'esempio, in questa procedura dettagliata la libreria di classi è presente nella stessa soluzione dell'applicazione Silverlight, ma può esistere in una soluzione separata.

Per ulteriori informazioni sulle librerie di classi RIA Services , vedere le sezioni pertinenti dell'argomento Creazione di soluzioni Servizi RIA.

[!NOTA] Se non è necessario creare componenti riutilizzabili o se si desidera una procedura dettagliata più preliminare sulla creazione di una soluzione RIA Services , vedere Procedura dettagliata: creazione di una soluzione Servizi RIA.

Prerequisiti

Per l'esecuzione di questa e di altre procedure dettagliate descritte nella documentazione di WCF RIA Services è necessario che siano installati e configurati correttamente alcuni programmi prerequisiti quali Visual Studio 2010 e Silverlight Developer Runtime e SDK, oltre a WCF RIA Services e a WCF RIA Services Toolkit. È inoltre richiesta l'installazione e la configurazione di SQL Server 2008 R2 Express with Advanced Services e l'installazione del database AdventureWorks OLTP e LT.

Le istruzioni dettagliate per soddisfare tali prerequisiti vengono fornite negli argomenti all'interno del nodo Prerequisiti per WCF RIA Services. Seguire tali istruzioni prima di continuare con questa procedura dettagliata in modo da assicurarsi che si verifichi il minor numero possibile di problemi durante l'esecuzione della procedura dettagliata di RIA Services .

Per creare una soluzione Silverlight contenente una libreria di classi WCF RIA Services

  1. Creare un nuovo progetto RIA Services in Visual Studio 2010 selezionando File, Nuovo, quindi Progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  2. Selezionare il modello Applicazione Silverlight dal gruppo Silverlight di Modelli installati e denominare il nuovo progetto ExampleSilverlightApp.

  3. Nella finestra di dialogo Nuova applicazione Silverlight, non selezionare la casella Abilita WCF RIA Services per l'applicazione.

    L'applicazione Silverlight non richiede un collegamento a RIA Services tra il progetto Silverlight e il progetto server perché il collegamento a RIA Services sarà disponibile tra i progetti della libreria di classi.

  4. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione, scegliere Aggiungi, quindi fare clic su Nuovo progetto.

    Verrà visualizzata la finestra di dialogo Aggiungi nuovo progetto.

  5. Nel riquadro Modelli installati della categoria Silverlight, selezionare il modello Libreria di classi WCF RIA Services e denominarlo AdventureWorksClassLibrary.

  6. Fare clic su OK.

    La soluzione ora contiene quattro progetti, come mostrato nell'illustrazione seguente.

  7. Fare clic con il pulsante destro del mouse sul progetto ExampleSilverlightApp.Web e selezionare Aggiungi riferimento.

    Verrà visualizzata la finestra di dialogo Aggiungi riferimento.

  8. Nella scheda Progetti, selezionare il progetto AdventureWorksClassLibrary.Web e fare clic su OK.

  9. Fare clic con il pulsante destro del mouse sul progetto ExampleSilverlightApp e selezionare Aggiungi riferimento.

  10. Nella scheda Progetti, selezionare il progetto AdventureWorksClassLibrary e fare clic su OK.

Per creare la libreria di livello intermedio

  1. Nel progetto AdventureWorksClassLibrary.Web, aggiungere un modello ADO.NET Entity Data Model denominato AdventureWorksModel.edmx. Per i passaggi per effettuare questa operazione, vedere Procedura dettagliata: creazione di una soluzione Servizi RIA.

  2. Nella procedura guidata Entity Data Model, includere la tabella Prodotto nel modello di entità.

  3. Compilare la soluzione (CTRL+MAIUSC+B).

  4. Fare clic con il pulsante destro del mouse sul progetto AdventureWorksClassLibrary.Web, selezionare Aggiungi e scegliere Nuovo elemento.

  5. Selezionare il modello Classe di DomainService e denominarlo ProductsDomainService.

  6. Fare clic su Aggiungi.

    Verrà visualizzata la finestra di dialogo Aggiungi una nuova classe DomainService.

  7. Selezionare Prodotto dai modelli di dati disponibili per esporre tramite il servizio del dominio e fare clic su OK.

  8. Compilare la soluzione (CTRL+MAIUSC+B).

  9. In Esplora soluzioni, selezionare Mostra tutti i file in ogni progetto.

    Notare che la cartella Generated_Code esiste solo nel progetto AdventureWorksClassLibrary. Anche se non è stato generato alcun codice per il progetto ExampleSilverlightApp, è comunque possibile utilizzare il codice generato dal progetto AdventureWorksClassLibrary perché esiste un riferimento tra i progetti ExampleSilverlightApp e AdventureWorksClassLibrary.

Per utilizzare il codice generato nel progetto Silverlight

  1. Fare clic con il pulsante destro del mouse sul progetto ExampleSilverlightApp e selezionare Aggiungi riferimento.

  2. Aggiungere un riferimento all'assembly System.ServiceModel.DomainServices.Client.

    Per trovare l'assembly, selezionare la scheda .NET.

  3. Nel progetto ExampleSilverlightApp, aprire MainPage.xaml.

  4. Dalla casella degli strumenti, trascinare un controllo DataGrid nell'elemento Grid.

    Vengono aggiunti uno spazio dei nomi XML e i riferimenti agli assembly di dati.

  5. Assegnare il nome ProductsGrid all'elemento DataGrid, come illustrato nel codice XAML riportato di seguito.

    <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. Aprire il code-behind per MainPage.xaml.

  7. Aggiungere il seguente codice per recuperare i prodotti.

    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. Aprire il file App.Config nel progetto AdventureWorksClassLibrary.Web e copiare individualmente gli elementi <connectionStrings>, <system.serviceModel> e <httpModules> e gli elementi che contengono. Incollare individualmente ogni elemento nel file Web.config del progetto ExampleSilverlightApp.Web. Il file Web.config sarà simile all'esempio seguente, con le informazioni di connessione relative all'ambiente in uso.

    <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. Eseguire (F5) l'applicazione.