Condividi tramite


Procedura dettagliata: aggiunta di una cache database locale a un'applicazione a più livelli

Aggiornamento: novembre 2007

Una cache database locale, nel contesto di Visual Studio, è un database SQL Server Compact 3.5 configurato per sincronizzare i dati con un database remoto utilizzando Servizi di sincronizzazione Microsoft per ADO.NET. In questa procedura dettagliata vengono fornite istruzioni specifiche per l'aggiunta di un database SQL Server Compact 3.5 all'applicazione creata nell'argomento Procedura dettagliata: creazione di un'applicazione dati a più livelli.

In questa procedura dettagliata viene illustrato come completare le seguenti attività:

  • Aggiungere un elemento cache database locale a un progetto.

  • Configurare la sincronizzazione dei dati.

  • Incorporare le operazioni di sincronizzazione nel servizio dati esistente.

  • Modificare il codice che carica i dati così che recuperi la tabella Customers dalla cache database locale.

  • Aggiungere il codice per avviare il processo di sincronizzazione.

Prerequisiti

Per completare questa procedura dettagliata, è necessario disporre dei seguenti elementi:

Nota:

Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.

Apertura della soluzione NTierWalkthrough

Per aprire la soluzione NTierWalkthrough

Aggiunta della cache database locale a NTierWalkthrough

Perché una cache database locale è un database SQL Server Compact 3.5 situato sul client, aggiungere la cache database locale al progetto PresentationTier. Poiché in questa procedura dettagliata viene mostrato come memorizzare nella cache la tabella Customers, denominare la cache database locale CustomersCache.

Nota:

In questa procedura dettagliata, la cache database locale è denominata CustomersCache perché utilizza solo la tabella Customers, ma più tabelle possono essere aggiunte a una cache database locale.

Per aggiungere la cache dati locale al livello della presentazione

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su PresentationTier e scegliere Aggiungi nuovo elemento.

  2. Fare clic sul modello Cache database locale.

  3. Digitare CustomersCache nella casella Nome.

  4. Scegliere Aggiungi.

    Verrà aperta la finestra di dialogo Configura sincronizzazione dati.

Configurazione della sincronizzazione dei dati

Per configurare la sincronizzazione dei dati, selezionare la connessione dati al server e selezionare le tabelle da memorizzare nella cache localmente nell'applicazione. Questa procedura dettagliata richiede di impostare una connessione server alla versione SQL Server del database Northwind e di aggiungere la tabella Customers alla cache locale. Inoltre, poiché si sta aggiungendo la cache database locale a un'applicazione a più livelli, è necessario impostare le opzioni avanzate per generare i componenti di sincronizzazione server in un progetto distinto: DataService.

Per configurare la sincronizzazione dei dati in un'applicazione a più livelli

  1. Impostare Connessione server sulla versione SQL Server del database Northwind.

  2. Fare clic sul pulsante Aggiungi per aprire la finestra di dialogo Configura tabelle per uso non in linea.

  3. Selezionare la casella di controllo associata alla tabella Customers e fare clic su OK. Lasciare i valori predefiniti.

  4. Scegliere Avanzate.

  5. Nell'elenco Percorso progetto server selezionare DataService.

  6. Scegliere OK.

    I componenti di sincronizzazione vengono generati, i dati vengono sincronizzati per la prima volta (il database locale viene creato nel progetto e popolato con i dati) e la Configurazione guidata origine dati viene aperta.

  7. Selezionare la tabella Customers, quindi selezionare la casella di controllo ad essa associata nella pagina Seleziona oggetti di database.

  8. DigitareLocalNorthwindCustomers in Nome DataSet e fare clic su Fine.

Attivazione della sincronizzazione nel servizio dati esistente

I componenti di sincronizzazione generati sono stati aggiunti al progetto DataService, ma devono ancora essere implementati dal servizio. Il SyncContract generato contiene le informazioni necessarie per il servizio. Queste informazioni sono visualizzate come commenti nel file. Copiare le informazioni necessarie nella sezione appropriata del file App.config del servizio.

Per aggiungere le informazioni sul servizio al file App.config

  1. Aprire il file CustomersCache.Server.SyncContract facendovi doppio clic in Esplora soluzioni.

  2. Trovare la riga commentata che assomiglia alla seguente:

    <endpoint address ="" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>

  3. Copiare la riga senza il carattere di commento.

  4. Aprire il file App.config di DataService facendovi doppio clic in Esplora soluzioni.

  5. Individuare il commento <!-- Metadata Endpoints -->. Aggiungere la riga copiata nel passaggio 3 sotto la riga che inizia con <endpoint address = "mex".

  6. Digitare un nome (ad esempio, SyncServer) per l'indirizzo dell'endpoint appena incollato, in modo che il codice sia simile al seguente:

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <endpoint address ="SyncServer" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
    
  7. Scegliere Compila soluzione dal menu Compila.

Per aggiungere le operazioni del servizio di sincronizzazione al servizio dati esistente

  1. Aprire il file CustomersCache.Server.SyncContract facendovi doppio clic in Esplora soluzioni.

  2. Cambiare il nome della classe da CustomersCacheSyncService in Service1. Negli esempi di codice seguenti viene mostrata la dichiarazione di classe come deve apparire dopo avere modificato il nome della classe. Gli utenti di C# devono modificare anche il nome del costruttore.

    Partial Public Class Service1
        Inherits Object
        Implements ICustomersCacheSyncContract
    ...
    
    public partial class Service1 : object, ICustomersCacheSyncContract
    {...
    
  3. Per gli utenti di C#:

    Modificare la dichiarazione di classe affinché Service1 (nel file Service1.cs) sia una classe parziale, così che la dichiarazione assomigli alla seguente:

    public partial class Service1 : object, ICustomersCacheSyncContract {
    
    private CustomersCacheServerSyncProvider _serverSyncProvider;
    
    public Service1() 
    {...
    
  4. Scegliere Compila soluzione dal menu Compila.

Poiché le operazioni di sincronizzazione sono state aggiunte al servizio esistente, è necessario aggiornare il riferimento al servizio nel progetto PresentationTier.

Per aggiornare il riferimento al servizio

  1. In Esplora soluzioni, trovare ServiceReference1 nel progetto PresentationTier.

  2. Fare clic con il pulsante destro del mouse su ServiceReference1, quindi scegliere Aggiorna riferimento al servizio.

Modifica del form per caricare i dati dei clienti dalla cache locale

Il modulo nel livello di presentazione ottiene attualmente i dati dal servizio dati. Pertanto, è necessario modificare il codice per caricare i dati dalla copia locale della tabella Customers nel database SQL Server Compact 3.5. La tabella Orders è ancora caricata con i dati restituiti da DataService.

Per modificare Form1 affinché vengano caricati i dati dei clienti dalla cache database locale

  1. Aprire Form1 nell'editor del codice.

  2. Sostituire il codice Form1_Load esistente con quello riportato di seguito:

    Using DataSvc As New ServiceReference1.Service1Client
    
        ' Create a CustomersTableAdapter to load data from
        ' the local database cache.
        Dim CustomersTableAdapter As New LocalNorthwindCustomersTableAdapters.CustomersTableAdapter
    
        NorthwindDataSet.Customers.Merge(CustomersTableAdapter.GetData)
        NorthwindDataSet.Orders.Merge(DataSvc.GetOrders)
    End Using
    
    using (ServiceReference1.Service1Client DataSvc = new ServiceReference1.Service1Client())
    {
        LocalNorthwindCustomersTableAdapters.CustomersTableAdapter customersTableAdapter
           = new LocalNorthwindCustomersTableAdapters.CustomersTableAdapter();
        northwindDataSet.Customers.Merge(customersTableAdapter.GetData());
        northwindDataSet.Orders.Merge(DataSvc.GetOrders());
    }
    

Test dell'applicazione

Eseguire l'applicazione. I dati vengono recuperati dalla cache database locale e dal servizio dati.

Per eseguire il test dell'applicazione

  1. Premere F5.

  2. I dati della tabella Customers vengono recuperati dal database locale, mentre i dati della tabella Orders vengono recuperati dal servizio dati.

  3. Chiudere il form.

Sincronizzazione dei dati

Una volta configurato per visualizzare il livello di presentazione in modo che le tabelle vengano visualizzate dalle origini corrette, il passaggio successivo consiste nell'aggiungere il codice per l'avvio della sincronizzazione. Verrà aggiunto un pulsante al form per avviare il processo di sincronizzazione.

Per sincronizzare i dati tra la cache database locale e il database remoto

  1. Aprire Form1 nella visualizzazione Progettazione.

  2. Fare clic su Toolstrip nel form per aggiungere un pulsante a Toolstrip.

  3. Denominare il pulsante SyncButton.

  4. Fare doppio clic su SyncButton per creare un gestore eventi SyncButton_Click.

  5. Il codice seguente avvia il processo di sincronizzazione. Aggiungerlo al gestore eventi.

    Dim syncAgent As CustomersCacheSyncAgent = New CustomersCacheSyncAgent
    
        Using syncClient As New ServiceReference1.CustomersCacheSyncContractClient
        syncAgent.RemoteProvider = New Microsoft.Synchronization.Data.ServerSyncProviderProxy(syncClient)
        Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize
    
        NorthwindDataSet.Customers.Merge(New LocalNorthwindCustomersTableAdapters.CustomersTableAdapter().GetData())
    
        Dim syncSummary As String = "Total changes downloaded: " & _
           syncStats.TotalChangesDownloaded.ToString() & vbCrLf & _
           "Last successful synchronization: " & _
           syncStats.SyncCompleteTime.ToString
        MessageBox.Show(syncSummary)
    End Using 
    
    CustomersCacheSyncAgent syncAgent = new CustomersCacheSyncAgent();
    
    using (ServiceReference1.CustomersCacheSyncContractClient syncClient = new ServiceReference1.CustomersCacheSyncContractClient())
    {
        syncAgent.RemoteProvider = new Microsoft.Synchronization.Data.ServerSyncProviderProxy(syncClient);
        Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize();
        northwindDataSet.Customers.Merge(new LocalNorthwindCustomersTableAdapters.CustomersTableAdapter().GetData());
    
        string syncSummary = "Total changes downloaded: " + 
        syncStats.TotalChangesDownloaded.ToString() + Environment.NewLine +
        "Last successful synchronization: " +
         syncStats.SyncCompleteTime.ToString();
        MessageBox.Show(syncSummary);
    }
    
  6. I dati della tabella Customers vengono recuperati dal database locale, mentre i dati della tabella Orders vengono recuperati dal servizio dati.

  7. Chiudere il form.

Test dell'applicazione

Per eseguire il test dell'applicazione

  1. Premere F5.

  2. Con l'applicazione in esecuzione, utilizzare Esplora server/Esplora database, o un altro strumento di gestione di database, per connettersi al database del server remoto e modificare alcuni record.

    1. In Esplora server/Esplora database individuare la tabella Customers sul server database remoto, non la connessione a Northwind.sdf.

    2. Fare clic con il pulsante destro del mouse sulla tabella Customers e scegliere Mostra dati tabella.

    3. Modificare uno o più record ed eseguire il commit della modifica. Spostarsi dalla riga modificata.

  3. Tornare al form e fare clic su SyncButton.

  4. Verificare che le modifiche al database remoto siano sincronizzate con il database locale e visualizzate nella griglia.

  5. Chiudere il form. Interrompere il debug.

Passaggi successivi

A seconda dei requisiti dell'applicazione, è possibile eseguire diverse operazioni dopo l'aggiunta di una cache database locale a un'applicazione a più livelli. È possibile ad esempio apportare i seguenti miglioramenti a questa applicazione:

Vedere anche

Attività

Procedura: aggiungere il codice nei dataset di applicazioni a più livelli

Procedura dettagliata: aggiunta della convalida a un'applicazione dati a più livelli

Procedura dettagliata: creazione di un'applicazione connessa occasionalmente

Procedura dettagliata: distribuzione di un'applicazione client connessa occasionalmente con il database locale

Procedura: configurare un database locale e remoto per la sincronizzazione bidirezionale

Concetti

Cenni preliminari sull'applicazione dati a più livelli

Cenni preliminari sulle applicazioni connesse occasionalmente

SQL Server Compact 3.5 e Visual Studio

Novità relative ai dati

Altre risorse

Aggiornamento gerarchico

Accesso ai dati (Visual Studio)