Condividi tramite


Procedura dettagliata: creazione di una soluzione Servizi RIA

In questa procedura dettagliata, viene creata un'applicazione WCF RIA Services che recupera dati dal database AdventureWorksLT, quindi lo rende disponibile a un client Silverlight in cui vengono presentati. L'accesso ai dati dall'origine dati avviene mediante la creazione classi di entità che rappresentano varie tabelle di database nel server nel livello intermedio, quindi i dati vengono presentati creando un servizio del dominio che rende accessibili le entità del livello intermedio al client Silverlight. Questa procedura dettagliata rappresenta un punto di partenza per molte delle altre procedure dettagliate nella documentazione di RIA Services .

Prerequisiti

Per l'esecuzione di questa e di altre procedure dettagliate descritte nella documentazione di 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 .

Creazione di una soluzione con un collegamento a Servizi RIA tra progetti

Per impostare una soluzione Servizi RIA

  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 RIAServicesExample.

    RIA_StartProject

  3. Fare clic su OK.

    Verrà visualizzata la finestra di dialogo Nuova applicazione Silverlight.

  4. Selezionare la casella di controllo Abilita WCF RIA Services nella parte inferiore della finestra di dialogo. Se si seleziona questa casella viene creato un collegamento RIA Services tra il progetto client e il progetto server.

    RIA_CreateProjectwithLink

  5. Fare clic su OK per creare la soluzione.

    La soluzione contiene due progetti: un progetto client e un progetto server. Il progetto client è denominato RIAServicesExample e contiene il codice Silverlight utilizzato per creare il livello di presentazione. Il progetto server è denominato RIAServicesExample.Web e contiene il codice del livello intermedio.

    RIA_ProjectsCreated

Creazione di modelli di dati

In questa sezione verranno create le classi di entità ADO.NET che rappresentano i dati dal database AdventureWorksLT. RIA Services funziona con una varietà di classi e origini dati della modellazione dei dati. Per ulteriori informazioni sulle opzioni per accedere ai dati con RIA Services , vedere l'argomento Dati.

CautionAttenzione:
Quando si utilizza un Entity Data Model (EMD) con Visual Studio 2010, è necessario selezionare l'opzione Includi colonne di chiavi esterne nel modello. Per impostazione predefinita, questa opzione viene selezionata quando si utilizza la Procedura guidata Entity Data Model. È inoltre necessario utilizzare anche il comportamento predefinito per l'incorporamento delle informazioni di mapping EMD nell'assembly.

Per rendere disponibili i dati nel livello intermedio

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto server, RIAServicesExample.Web, scegliere Aggiungi, quindi Nuovo elemento.

    Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento.

  2. Dall'elenco di categorie, scegliere Dati e selezionare il modello ADO.NET Entity Data Model.

  3. Denominare il nuovo file AdventureWorksModel.edmx, quindi fare clic su Aggiungi.

    Viene visualizzata la procedura guidata Entity Data Model.

  4. Nella schermata Scegli contenuto Model fare clic su Genera da database, quindi fare clic su Avanti.

  5. Nella finestra di dialogo Scegli la connessione dati creare una connessione dati al database e fare clic su Avanti.

  6. Nella schermata Seleziona oggetti di database selezionare le tabelle Address, Customer e CustomerAddress.

  7. Verificare che la casella di controllo Includi colonne di chiavi esterne nel modello sia selezionata per impostazione predefinita e fare clic su Fine.

    Vengono creati i modelli di entità per le tabelle.

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

Creazione di un servizio del dominio

In questa sezione verrà aggiunto un servizio del dominio al progetto del livello intermedio. Un servizio del dominio espone al progetto client le entità di dati e le operazioni nel progetto server. È possibile aggiungere la logica di business al servizio del dominio per gestire l'interazione del client con i dati.

Per creare il servizio del dominio

  1. Fare clic con il pulsante destro del mouse sul progetto server, scegliere Aggiungi, quindi Nuovo elemento.

  2. Nell'elenco delle categorie, scegliere Web, quindi selezionare il modello Classe di DomainService.

  3. Denominare la classe CustomerDomainService.cs (o CustomerDomainService.vb).

    RIA_AddDomainService

  4. Fare clic su Aggiungi.

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

  5. Verificare che sia selezionata la casella Abilita l'accesso client.

  6. Selezionare l'entità Customer, quindi selezionare la relativa casella Abilita modifica.

    RIA_AddEntity

  7. Fare clic su OK.

    La classe CustomerDomainService viene generata in un nuovo file CustomerDomainService.cs (o CustomerDomainService.vb).

  8. Aprire il file. Notare le seguenti caratteristiche del file:

    • La classe CustomerDomainService deriva dalla classe LinqToEntitiesDomainService, classe di base astratta nel framework RIA Services . Questa classe di base è stata utilizzata automaticamente poiché il servizio del dominio espone una classe di dati di entità ADO.NET.

    • La classe di base generica viene associata alla classe di entità creata nei passaggi precedenti dall'oggetto AdventureWorksLTEntities di tipo ObjectContext nel parametro generico.

    • La classe CustomerDomainService è contrassegnata dall'attributo EnableClientAccessAttribute per indicare che è visibile al livello client.

    • Viene generato un metodo della query denominato GetCustomers. Questo metodo restituisce ciascun elemento senza filtrarlo o effettuarne l'ordinamento.

    • Sono stati generati i metodi per inserire, aggiornare ed eliminare clienti dai record.

Creazione del client Silverlight

Nelle altre procedure dettagliate, verrà mostrato come aggiungere la logica di business al servizio del dominio. Per questa procedura dettagliata, verrà semplicemente utilizzato il metodo GetCustomers generato per impostazione predefinita.

Le classi proxy client vengono generate una volta compilata la soluzione. Il collegamento RIA Services stabilito tra il progetto client e il progetto server rende possibile questa generazione di codice. Queste classi proxy client forniscono l'accesso ai dati dal client.

Per visualizzare le classi proxy client generate

  1. Compilare la soluzione.

    Quando si compila la soluzione, il codice viene generato nel progetto client.

  2. In Esplora soluzioni, selezionare il progetto client RIAServicesExample e fare clic sull'icona Mostra tutti i file nella parte superiore della finestra.

    Si noti che la cartella Generated_Code contiene un file RIAServicesExample.Web.g.cs (o RIAServicesExample.Web.g.vb).

    RIA_GeneratedCode

  3. Aprire il file di codice nella cartella Generated_Code.

    Notare le seguenti caratteristiche del file:

    • Viene generata una classe WebContext che deriva dalla classe WebContextBase.

    • Viene generata una classe CustomerDomainContext che deriva dalla classe DomainContext. Questa classe dispone di un metodo denominato GetCustomersQuery che corrisponde al metodo di query creato nel servizio del dominio.

    • Una classe Customer che deriva dalla classe Entity viene generata per l'entità esposta dal servizio del dominio. La classe dell'entità Customer nel progetto client corrisponde all'entità Customer nel server.

Per visualizzare i dati nel client Silverlight

  1. Aprire MainPage.xaml.

  2. Dalla casella degli strumenti sulla sinistra, trascinare un controllo DataGrid nell'elemento Grid nella visualizzazione XAML.

    Il trascinamento del controllo DataGrid dalla casella degli strumenti determina l'aggiunta automatica di un'istruzione using System.Windows.Controls dello spazio dei nomi e di un riferimento all'assembly System.Windows.Controls.Data.

    CautionAttenzione:
    Se si aggiunge DataGrid senza trascinarlo dalla casella degli strumenti, è necessario aggiungere manualmente i riferimenti all'assembly System.Windows.Controls.Data al progetto client e l'istruzione using al file code-behind.
  3. Modificare il valore dell'oggetto AutoGeneratedColums in True, denominare l'elemento CustomerGrid``DataGrid e rettificare gli attributi di altezza e larghezza come illustrato nel seguente codice XAML.

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

  5. Aggiungere due istruzioni using (C#) o Imports (Visual Basic): using RIAServicesExample.Web; e using System.ServiceModel.DomainServices.Client;.

    Lo spazio dei nomi RIAServicesExample.Web è quello contenente il codice generato per il progetto client in RIAServicesExample.Web.g.cs (o RIAServicesExample.Web.g.vb).

  6. Per creare un'istanza di CustomerDomainContext, aggiungere la riga di codice private CustomerDomainContext _customerContext = new CustomerDomainContext(); nella classe 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. Recuperare le entità del cliente chiamando il metodo GetCustomersQuery con LoadOperation: LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());.

  8. Associare le entità caricate a DataGrid con CustomerGrid.ItemsSource = loadOp.Entities;.

    Per riassumere, il file MainPage.xaml.cs a questo punto contiene il codice seguente:

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

    Verrà visualizzata una griglia dei dati simile a quella riportata di seguito.

    RIA_ResultsGrid

Passaggi successivi

In questa procedura dettagliata sono stati mostrati solo i passaggi di base per creare un progetto e recuperare dati non filtrati da un servizio del dominio. Di seguito vengono forniti alcuni suggerimenti per l'utilizzo di funzionalità aggiuntive.