Condividi tramite


Architettura e classi per la sincronizzazione client e server

Sync Framework consente la sincronizzazione tra un database client SQL Server Compact e un database server o qualsiasi altra origine dati, ad esempio un servizio che fornisce quotazioni di titoli in XML. Per sincronizzare due database, Sync Framework supporta architetture a due livelli e a N livelli che utilizzano qualsiasi database server per cui è disponibile un provider ADO.NET. Per la sincronizzazione tra un database client e altri tipi di origini dati, Sync Framework supporta un'architettura basata su servizi. Tale architettura richiede più codice dell'applicazione rispetto alle architetture a due livelli e a N livelli; tuttavia, non richiede un approccio diverso alla sincronizzazione da parte dello sviluppatore.

Le illustrazioni seguenti mostrano i componenti coinvolti nelle architetture a due livelli, a N livelli e basate su servizi. Ogni illustrazione mostra un singolo client, ma spesso capita che più client vengano sincronizzati con un unico server. Sync Framework utilizza un modello hub e spoke per la sincronizzazione dei database client e server. La sincronizzazione viene sempre inizializzata dal client. Tutte le modifiche provenienti da ciascun client vengono sincronizzate con il server prima di essere inviate dal server ad altri client. Si tratta di client che non si scambiano direttamente le modifiche.

Sync Framework fornisce la sincronizzazione snapshot, di solo download, di solo caricamento e bidirezionale per scenari client e server:

  • In genere, le sincronizzazioni snapshot e di solo download vengono utilizzate per archiviare e aggiornare in un client i dati di riferimento, ad esempio un elenco di prodotti. Durante la sincronizzazione, le modifiche ai dati effettuate nel server vengono scaricate nel database client. La sincronizzazione snapshot aggiorna completamente i dati a ogni sincronizzazione del client. Tale caratteristica è utile quando non si desidera tenere traccia delle modifiche incrementali o quando il server non è in grado di farlo. La sincronizzazione di solo download scarica solo le modifiche incrementali che si sono verificate a partire dalla precedente sincronizzazione.

  • La sincronizzazione di solo caricamento è in genere utilizzata per inserire dati, come ad esempio un ordine di vendita, in un client. Gli inserimenti e le altre modifiche ai dati effettuate nel database client vengono caricate nel server durante la sincronizzazione.

  • La sincronizzazione bidirezionale è utilizzata in genere per i dati, come le informazioni di contatto dei clienti, aggiornabili nel client e nel server. Ogni modifica in conflitto deve essere gestita durante la sincronizzazione.

Per ulteriori informazioni sui tipi di sincronizzazione, vedere Procedura: specificare la sincronizzazione snapshot, di download, di caricamento e bidirezionale. Poiché l'architettura di Sync Framework per la sincronizzazione client e server è asimmetrica, sebbene il rilevamento delle modifiche sia incorporato nel database client è necessario tenere traccia delle modifiche nell'archivio dati del server se si desidera scaricare le modifiche incrementali. Per ulteriori informazioni sul rilevamento delle modifiche, vedere Rilevamento delle modifiche nel database server.

Componenti nelle illustrazioni relative all'architettura

I componenti nelle illustrazioni relative all'architettura includono i database client e server e un set di classi dall'API per la sincronizzazione dei database di Sync Framework. Le architetture a n livelli e basate su servizi includono anche i componenti Servizio Web e Trasporto che è necessario scrivere.

Architettura a due livelli

Nella prima illustrazione viene mostrata un'architettura a due livelli composta da un database client e da un database server.

Topologia per la sincronizzazione a due livelli

Ad eccezione dei due database, tutti gli elementi nell'illustrazione corrispondono alle classi Sync Framework. Tali classi sono contenute nelle DLL seguenti:

  • Microsoft.Synchronization.Data.dll contiene l'Agente di sincronizzazione, le Tabelle di sincronizzazione e i Gruppi di sincronizzazione.

  • Microsoft. Synchronization.Data.SqlServerCe.dll contiene il Provider di sincronizzazione client.

  • Microsoft. Synchronization.Data.Server.dll contiene il Provider di sincronizzazione server e gli Adattatori di sincronizzazione.

Tutte le DLL dipendono da System.dll e da System.Data.dll, provenienti da .NET Framework 2.0 o versioni successive. Microsoft.Synchronization.Data.SqlServerCe.dll dipende anche da System.Data.SqlServerCe.dll, proveniente da SQL Server Compact. Per le applicazioni a due livelli, tutte le DLL di Sync Framework risiedono sul client. Per le applicazioni a N livelli, Microsoft.Synchronization.Data.dll e Microsoft.Synchronization.Data.Server.dll risiedono su un computer separato che fornisce un servizio di sincronizzazione.

Architettura a N livelli

Nella seconda illustrazione viene mostrata un'architettura a N livelli. Tale architettura richiede un proxy, un servizio e un meccanismo di trasporto per le comunicazioni tra i database client e server. È più comune rispetto a un'architettura a due livelli, dato che un'architettura a N livelli non richiede una connessione diretta tra i database client e server.

Topologia per la sincronizzazione a n livelli

Architettura basata su servizi

Nella terza illustrazione viene mostrata un'architettura basata su servizi. Tale architettura include un database client, ma non un database server, né i Provider di sincronizzazione server e gli Adattatori di sincronizzazione corrispondenti. Per utilizzare questo tipo di architettura, un'applicazione deve essere in grado di comunicare con l'Agente di sincronizzazione mediante un proxy e un servizio personalizzati, Essi devono fornire la stessa funzionalità comunemente fornita dal Provider di sincronizzazione server e dagli Adattatori di sincronizzazione, come il recupero delle modifiche da sincronizzare.

Topologia per la sincronizzazione basata su servizio

Database client

Il database client per le applicazioni Sync Framework è SQL Server Compact 3.5 SP1 e versioni successive, inclusa la versione a 64 bit di SQL Server Compact. Sync Framework fornisce un'infrastruttura per il rilevamento delle modifiche incrementali nel database client. Tale infrastruttura viene attivata alla prima sincronizzazione di qualunque tabella utilizzando un metodo diverso dalla sincronizzazione snapshot. Per impostazione predefinita, i metadati richiesti da Sync Framework nel database client vengono archiviati per 10 giorni. Per ulteriori informazioni sulla conservazione dei metadati, vedere RetentionInDays.

Database server

Il database server può essere un qualsiasi database per cui è disponibile un provider ADO.NET. Se si desidera rilevare le modifiche incrementali nel database server, è necessario predisporre il database a tale scopo. Per ulteriori informazioni, vedere Rilevamento delle modifiche nel database server.

Classi di Sync Framework

Nell'illustrazione precedente sono rappresentate le classi seguenti: SyncAgent, SqlCeClientSyncProvider, DbServerSyncProvider, SyncTable, SyncGroup e SyncAdapter. Per un esempio dell'utilizzo di queste classi in un'applicazione, vedere Guida introduttiva: sincronizzazione client e server.

Agente di sincronizzazione

L'agente di sincronizzazione gestisce la sincronizzazione nei modi seguenti:

  • Scorre in ciclo ogni tabella da sincronizzare.

  • Chiama il provider di sincronizzazione client per recuperare e applicare le modifiche al database client.

  • Chiama il provider di sincronizzazione server per recuperare e applicare le modifiche al database server.

L'agente di sincronizzazione gestisce inoltre le informazioni a livello di sessione per la sincronizzazione e fornisce messaggi di operazione riuscita, errori e statistiche all'applicazione nel client. Per ulteriori informazioni, vedere SyncAgent e Procedura: specificare la sincronizzazione snapshot, di download, di caricamento e bidirezionale.

Provider di sincronizzazione client

Il provider di sincronizzazione client comunica con il client e protegge l'agente di sincronizzazione dall'implementazione specifica del database client. Sync Framework include un provider per il database SQL Server Compact. Le attività principali del provider di sincronizzazione client sono le seguenti:

  • Memorizza informazioni sulle tabelle nel client abilitate alla sincronizzazione.

  • Recupera le modifiche che si sono verificate nel database client a partire dall'ultima sincronizzazione.

  • Applica le modifiche incrementali al database client.

  • Rileva le modifiche in conflitto.

Per ulteriori informazioni, vedere SqlCeClientSyncProvider e Procedura: specificare la sincronizzazione snapshot, di download, di caricamento e bidirezionale.

Provider di sincronizzazione server

Il provider di sincronizzazione server comunica con il server e protegge l'agente di sincronizzazione dall'implementazione specifica del database server. Le attività principali del provider di sincronizzazione server sono le seguenti:

  • Memorizza informazioni sulle tabelle nel server abilitate alla sincronizzazione.

  • Attiva le applicazioni destinate al recupero delle modifiche che si sono verificate nel database server a partire dall'ultima sincronizzazione.

  • Applica le modifiche incrementali al database server.

  • Rileva le modifiche in conflitto.

Per ulteriori informazioni, vedere DbServerSyncProvider e Procedura: specificare la sincronizzazione snapshot, di download, di caricamento e bidirezionale.

Tabella e gruppo di sincronizzazione

Per ogni tabella sincronizzata viene definita una tabella di sincronizzazione. Memorizza le impostazioni, come ad esempio la direzione di sincronizzazione. Ogni client può richiedere solo le tabelle di cui necessita, pertanto potrebbe non includere tutte le tabelle che il provider di sincronizzazione server rende disponibili. Ad esempio, si considerino 20 tabelle, di cui 10 configurate per la sincronizzazione bidirezionale nel Provider di sincronizzazione server. Un client potrebbe richiedere solo 12 delle tabelle di solo download. Nonostante il server supporti il caricamento, il client non deve apportare modifiche o sincronizzare tutte le tabelle. Per ulteriori informazioni, vedere SyncTable.

Dopo aver definito una tabella di sincronizzazione, è possibile aggiungerla a un gruppo di sincronizzazione. Un gruppo di sincronizzazione è un meccanismo che garantisce un'applicazione coerente delle modifiche per un set di tabelle. Se le tabelle sono incluse in un gruppo di sincronizzazione, le modifiche a tali tabelle vengono trasferite come un'unità e applicate al server in un'unica transazione. In caso di mancata applicazione di una modifica al gruppo, alla successiva sincronizzazione verrà eseguito un nuovo tentativo di applicazione delle modifiche all'intero gruppo. Per ulteriori informazioni, vedere SyncGroup e Procedura: specificare la sincronizzazione snapshot, di download, di caricamento e bidirezionale.

Adattatore di sincronizzazione

Modellato in base all'adattatore dati in ADO.NET, l'adattatore di sincronizzazione viene definito per ogni tabella sincronizzata. L'adattatore di sincronizzazione fornisce al provider di sincronizzazione server i comandi specifici richiesti per interagire con il database server, come InsertCommand, che applica gli inserimenti dal database client al database server. Dato che gli adattatori di sincronizzazione utilizzano l'oggetto ADO.NET DbCommand, è possibile utilizzare qualsiasi struttura di comando supportata da ADO.NET, tra cui Transact-SQL inline, stored procedure, viste, funzioni e così via. I comandi richiedono un solo risultato che definisce la struttura e i dati da trasferire e applicare. Per ulteriori informazioni, vedere SyncAdapter e Procedura: specificare la sincronizzazione snapshot, di download, di caricamento e bidirezionale.

Proxy, servizio e trasporto

Proxy, Servizio e Trasporto sono utilizzati nelle architetture a N livelli e basate su servizi. Nelle applicazioni a N livelli, viene utilizzato Microsoft.Synchronization.Data.Server.dll, anche se non risiede nel client. In genere, la DLL risiede in un livello intermedio che presenta una connessione diretta al database server. In questo caso, per le comunicazioni tra il client e il livello intermedio sono richiesti un proxy e un servizio:

  • Sul client, il codice dell'applicazione fa riferimento a un proxy per il provider di sincronizzazione server (ServerSyncProviderProxy) anziché direttamente al provider. Il proxy comunica con un servizio nel livello intermedio.

  • Nel livello intermedio, il servizio eredita ed espone gli stessi metodi di ServerSyncProvider (la classe astratta da cui eredita DbServerSyncProvider). I metodi del provider di sincronizzazione server vengono quindi eseguiti mediante una connessione diretta al database server. I risultati vengono indirizzati attraverso il livello intermedio, quindi di nuovo al client.

Per ulteriori informazioni, vedere Procedura: configurare la sincronizzazione a n livelli.

Nelle applicazioni basate su servizi, Microsoft.Synchronization.Data.Server.dll non viene utilizzato nel client. Il codice dell'applicazione deve fornire la stessa funzionalità comunemente fornita dal provider di sincronizzazione server e dagli adattatori di sincronizzazione:

  • Sul client, il codice dell'applicazione fa riferimento a un proxy per quanto riguarda il codice dell'applicazione che gestisce le attività del provider di sincronizzazione server, come ad esempio il recupero delle modifiche dall'origine dati. Il proxy comunica con un servizio nel livello intermedio.

  • Nel livello intermedio, il servizio eredita ed espone gli stessi metodi di ServerSyncProvider (la classe astratta da cui eredita DbServerSyncProvider). I metodi vengono quindi eseguiti dal codice dell'applicazione mediante una connessione diretta al database server. I risultati vengono indirizzati attraverso il livello intermedio, quindi di nuovo al client.

Classi aggiuntive nell'API

Nelle illustrazioni di questo argomento vengono mostrate le classi principali contenute nell'API. Tuttavia, molte di esse non vengono mostrate. Per ottenere informazioni su tutte le classi disponibili, vedere Microsoft.Synchronization, Microsoft.Synchronization.Data, Microsoft.Synchronization.Data.SqlServerCe e Microsoft.Synchronization.Data.Server. Nelle sezioni seguenti sono contenute le introduzioni a altre quattro importanti classi di cui è necessario acquisire una certa familiarità.

Ancoraggio di sincronizzazione

Un ancoraggio di sincronizzazione rappresenta un momento specifico di riferimento per un set di tabelle sincronizzate dal server. Gli ancoraggi di sincronizzazione consentono a un'applicazione di determinare quali modifiche sincronizzare nel corso di una sessione specificata. Durante la sincronizzazione, il provider di sincronizzazione client memorizza i punti di riferimento seguenti nel database client:

  • Ultimo ancoraggio ricevuto
    Identifica l'ultima modifica scaricata dal server.
  • Ultimo ancoraggio inviato
    Identifica l'ultima modifica caricata dal client.

Alla successiva sincronizzazione, un'applicazione può utilizzare tali ancoraggi per identificare il punto iniziale di sincronizzazione per il set successivo di modifiche. Per ulteriori informazioni, vedere SyncAnchor e Rilevamento delle modifiche nel database server.

Statistiche della sessione di sincronizzazione

Le statistiche della sessione rappresentano un set di statistiche fornite dall'agente di sincronizzazione per ogni sessione di sincronizzazione. Le statistiche includono informazioni sugli orari di sincronizzazione, sul numero di modifiche elaborate e su qualsiasi eccezione o conflitto che si è verificato. Per ulteriori informazioni, vedere SyncStatistics e Procedura: utilizzare gli eventi e la logica di business del programma.

Variabili della sessione di sincronizzazione

Le variabili di sessione sono variabili destinate agli sviluppatori per essere utilizzate come parametri per i comandi di selezione, inserimento, aggiornamento ed eliminazione eseguiti nel server. È possibile utilizzare le variabili in diversi modi: per fornire supporto per il rilevamento dei conflitti e per evitare di scaricare più volte le stesse modifiche in un client. Per ulteriori informazioni, vedere SyncSession e Procedura: utilizzare le variabili di sessione.

Compilatore dell'adattatore di sincronizzazione di SQL Server

Modellato in base al compilatore comandi in ADO.NET, il compilatore dell'adattatore di sincronizzazione favorisce lo sviluppo di codice per i comandi di sincronizzazione eseguiti dal provider di sincronizzazione server. Il compilatore dell'adattatore di sincronizzazione produce istruzioni SELECT, INSERT, UPDATE e DELETE per i database SQL Server. Tali istruzioni si basano sulle informazioni fornite riguardanti le tabelle coinvolte nella sincronizzazione. Per ulteriori informazioni, vedere SqlSyncAdapterBuilder e Strumenti che facilitano lo sviluppo di applicazioni.

Vedere anche

Concetti

Scenari offline
Guida introduttiva: sincronizzazione client e server