Procedura dettagliata: aggiunta di una cache database locale a un'applicazione a più livelli
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 quanto elencato di seguito:
Soluzione e progetti associati creati in Procedura dettagliata: creazione di un'applicazione dati a più livelli.
Accesso al database di esempio Northwind. Per ulteriori informazioni, vedere Procedura: installare database di esempio.
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
Scegliere Apri dal menu File, fare clic su Progetto/Soluzione, quindi passare al percorso del file NTierWalkthrough.sln.
Nota
Il file NTierWalkthrough.sln viene creato nell'argomento Procedura dettagliata: creazione di un'applicazione dati a più livelli e costituisce un prerequisito per il completamento di questa procedura dettagliata. Completare l'argomento Procedura dettagliata: creazione di un'applicazione dati a più livelli e al termine salvare tutti i progetti, se non sono stati ancora salvati.
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
In Esplora soluzioni fare clic con il pulsante destro del mouse su PresentationTier e scegliere Aggiungi nuovo elemento.
Fare clic sul modello Cache database locale.
Digitare CustomersCache nella casella Nome.
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
Impostare Connessione server sulla versione SQL Server del database Northwind.
Fare clic sul pulsante Aggiungi per aprire la finestra di dialogo Configura tabelle per uso offline.
Selezionare la casella di controllo associata alla tabella Customers e fare clic su OK. Lasciare i valori predefiniti.
Scegliere Avanzate.
Nell'elenco Percorso progetto server selezionare DataService.
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.
Selezionare la tabella Customers, quindi selezionare la casella di controllo ad essa associata nella pagina Seleziona oggetti di database.
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
Aprire il file CustomersCache.Server.SyncContract facendovi doppio clic in Esplora soluzioni.
Trovare la riga commentata che assomiglia alla seguente:
<endpoint address ="" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
Copiare la riga senza il carattere di commento.
Aprire il file App.config di DataService facendovi doppio clic in Esplora soluzioni.
Individuare il commento <!-- Metadata Endpoints -->. Aggiungere la riga copiata nel passaggio 3 sotto la riga che inizia con <endpoint address = "mex".
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"/>
Scegliere Compila soluzione dal menu Compila.
Per aggiungere le operazioni del servizio di sincronizzazione al servizio dati esistente
Aprire il file CustomersCache.Server.SyncContract facendovi doppio clic in Esplora soluzioni.
Modificare il nome della classe da CustomersCacheSyncService a 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 {...
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() {...
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
In Esplora soluzioni, trovare ServiceReference1 nel progetto PresentationTier.
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
Aprire Form1 nell'editor del codice.
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()); }
Verifica dell'applicazione
Eseguire l'applicazione. I dati vengono recuperati dalla cache database locale e dal servizio dati.
Per eseguire il test dell'applicazione
Premere F5.
I dati della tabella Customers vengono recuperati dal database locale, mentre i dati della tabella Orders vengono recuperati dal servizio dati.
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
Aprire Form1 nella visualizzazione Progettazione.
Fare clic su Toolstrip nel form per aggiungere un pulsante a Toolstrip.
Denominare il pulsante SyncButton.
Fare doppio clic su SyncButton per creare un gestore eventi SyncButton_Click.
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); }
I dati della tabella Customers vengono recuperati dal database locale, mentre i dati della tabella Orders vengono recuperati dal servizio dati.
Chiudere il form.
Verifica dell'applicazione
Per eseguire il test dell'applicazione
Premere F5.
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.
In Esplora server/Esplora database individuare la tabella Customers sul server database remoto, non la connessione a Northwind.sdf.
Fare clic con il pulsante destro del mouse sulla tabella Customers e scegliere Mostra dati tabella.
Modificare uno o più record ed eseguire il commit della modifica. Spostarsi dalla riga modificata.
Tornare al form e fare clic su SyncButton.
Verificare che le modifiche al database remoto siano sincronizzate con il database locale e visualizzate nella griglia.
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:
Aggiungere la convalida al dataset. Per informazioni, vedere Procedura dettagliata: aggiunta della convalida a un'applicazione dati a più livelli.
Attivare la sincronizzazione bidirezionale. Per informazioni, vedere Procedura: configurare un database locale e remoto per la sincronizzazione bidirezionale.
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: 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à dello sviluppo di applicazioni di dati