Architecture et classes pour la synchronisation client et serveur
Sync Framework active la synchronisation entre une base de données client SQL Server Compact et une base de données serveur ou toute autre source de données, par exemple un service qui fournit des valeurs boursières en XML. Pour synchroniser deux bases de données, Sync Framework prend en charge les architectures à deux couches et multicouches qui utilisent une base de données serveur pour laquelle un fournisseur ADO.NET est disponible. Pour synchroniser une base de données client et d'autres types de sources de données, Sync Framework prend en charge une architecture basée sur les services. Dans cette architecture, le code d'application requis est plus important que dans les architectures à deux couches et multicouches ; cependant, un développeur n'est pas obligé de suivre une approche de synchronisation différente.
Les illustrations suivantes présentent les composants qui interviennent dans les architectures à deux couches, multicouches et basées sur les services. Chaque illustration présente un seul client, bien qu'en règle générale, plusieurs clients effectuent une synchronisation avec un seul serveur. Sync Framework utilise un modèle hub-and-spoke pour la synchronisation des bases de données client et serveur. La synchronisation est systématiquement lancée par le client. Toutes les modifications de chaque client sont synchronisées avec le serveur avant que les modifications ne soient envoyées du serveur vers d'autres clients. (Il s'agit de clients qui n'échangent pas les modifications directement entre eux.)
Sync Framework assure la synchronisation par instantané, la synchronisation par téléchargement ascendant uniquement, la synchronisation par téléchargement uniquement et la synchronisation bidirectionnelle pour les scénarios client et serveur :
La synchronisation par téléchargement uniquement et la synchronisation par instantané sont généralement utilisées pour stocker et mettre à jour des données de référence (telles qu'une liste de produits) sur un client. Les modifications de données qui sont effectuées sur le serveur sont téléchargées dans la base de données client lors de la synchronisation. La synchronisation par instantané actualise intégralement les données chaque fois que le client est synchronisé. Ce type de synchronisation est utile lorsque vous ne voulez pas suivre les modifications incrémentielles ou lorsque le serveur n'est pas en mesure de le faire. La synchronisation par téléchargement uniquement télécharge exclusivement les modifications incrémentielles qui sont intervenues depuis la synchronisation précédente.
La synchronisation par téléchargement ascendant uniquement est généralement utilisée pour insérer des données (telles qu'une commande client) sur un client. Les insertions et les autres modifications de données qui sont effectuées dans la base de données client sont téléchargées sur le serveur durant la synchronisation.
La synchronisation bidirectionnelle est généralement utilisée pour les données (telles que les informations de contact des clients) qui peuvent être mises à jour sur le client et sur le serveur. Toutes les modifications conflictuelles doivent être traitées au cours de la synchronisation.
Pour plus d'informations sur les types de synchronisation, consultez Procédure : spécifier la synchronisation par instantané, par téléchargement, par téléchargement ascendant et bidirectionnelle. L'architecture Sync Framework pour la synchronisation client et serveur est asymétrique ; en d'autres termes, le suivi des modifications est intégré dans la base de données client, mais vous devez suivre les modifications dans le magasin de données du serveur si vous voulez que les modifications incrémentielles soient téléchargées. Pour plus d'informations sur le suivi des modifications, consultez Suivi des modifications dans la base de données serveur.
Composants dans les illustrations de l'architecture
Les composants dans les illustrations de l'architecture incluent les bases de données client et serveur, ainsi qu'un ensemble de classes de l'API de synchronisation de bases de données Sync Framework. L'architecture multicouche et l'architecture basée sur les services incluent également les composants Service Web et Transport que vous devez écrire.
Architecture à deux couches
La première illustration représente une architecture à deux couches comprenant une base de données client et une base de données serveur.
À l'exception de ces deux bases de données, tous les éléments de l'illustration correspondent à des classes Sync Framework. Les classes sont contenues dans les DLL suivantes :
Microsoft.Synchronization.Data.dll contient les groupes de synchronisation, les tables de synchronisation et l'agent de synchronisation.
Microsoft. Synchronization.Data.SqlServerCe.dll contient le fournisseur de synchronisation client.
Microsoft. Synchronization.Data.Server.dll contient le fournisseur de synchronisation serveur et les adaptateurs de synchronisation.
Toutes les DLL reposent sur les DLL System.dll et System.Data.dll de .NET Framework 2.0 ou version ultérieure. Microsoft.Synchronization.Data.SqlServerCe.dll repose également sur la DLL System.Data.SqlServerCe.dll de SQL Server Compact. Pour les applications à deux couches, toutes les DLL de Sync Framework résident sur le client. Pour les applications multicouches, Microsoft.Synchronization.Data.dll et Microsoft.Synchronization.Data.Server.dll résident sur un ordinateur distinct qui assure un service de synchronisation.
Architecture multicouche
La seconde illustration présente une architecture multicouche. Elle nécessite un proxy, un service et un mécanisme de transport pour la communication entre la base de données client et la base de données serveur. Cette architecture est plus courante que l'architecture à deux couches, car une architecture multicouche ne requiert pas de connexion directe entre les bases de données client et serveur.
Architecture basée sur les services
La troisième illustration présente une architecture basée sur les services. Cette architecture inclut une base de données client mais n'inclut pas de base de données serveur, ni le fournisseur de synchronisation serveur et les adaptateurs de synchronisation correspondants. Pour qu'une application puisse utiliser ce type d'architecture, elle doit être en mesure de communiquer avec l'agent de synchronisation par le biais d'un proxy personnalisé et d'un service personnalisé. Ces derniers doivent assurer les fonctions généralement fournies par le fournisseur de synchronisation serveur et les adaptateurs de synchronisation ; par exemple, l'extraction des modifications à synchroniser.
Base de données client
La base de données client des applications Sync Framework est SQL Server Compact 3.5 SP1 et versions ultérieures, notamment la version 64 bits de SQL Server Compact. Sync Framework fournit une infrastructure permettant de suivre les modifications incrémentielles dans la base de données client. Cette infrastructure est activée lors de la première synchronisation d'une table à l'aide d'une méthode autre que la synchronisation par instantané. Par défaut, les métadonnées requises par Sync Framework dans la base de données client sont stockées pendant 10 jours. Pour plus d'informations sur la conservation des métadonnées, consultez RetentionInDays.
Base de données serveur
La base de données serveur peut être toute base de données pour laquelle un fournisseur ADO.NET est disponible. Si vous voulez suivre les modifications incrémentielles dans la base de données serveur, vous devez préparer la base de données à cette fin. Pour plus d'informations, consultez Suivi des modifications dans la base de données serveur.
Classes Sync Framework
Les classes suivantes sont représentées dans l'illustration précédente : SyncAgent, SqlCeClientSyncProvider, DbServerSyncProvider, SyncTable, SyncGroup et SyncAdapter. Pour obtenir un exemple d'utilisation de ces classes dans une application, consultez Mise en route : synchronisation client et serveur.
Agent de synchronisation
L'agent de synchronisation mène la synchronisation comme suit :
Il parcourt chacune des tables à synchroniser.
Il appelle le fournisseur de synchronisation client afin d'extraire les modifications et de les appliquer à la base de données client.
Il appelle le fournisseur de synchronisation serveur afin d'extraire les modifications et de les appliquer à la base de données serveur.
L'agent de synchronisation gère également les informations de niveau session pour la synchronisation et fournit des messages de réussite, des erreurs et des statistiques à l'application sur le client. Pour plus d'informations, consultez SyncAgent et Procédure : spécifier la synchronisation par instantané, par téléchargement, par téléchargement ascendant et bidirectionnelle.
Fournisseur de synchronisation client
Le fournisseur de synchronisation client communique avec le client et protège l'agent de synchronisation contre l'implémentation spécifique de la base de données client. Sync Framework inclut un fournisseur pour la base de données SQL Server Compact. Les principales activités du fournisseur de synchronisation client sont les suivantes :
Stocke des informations sur les tables du client qui sont activées pour la synchronisation.
Récupère les modifications intervenues dans la base de données client depuis la dernière synchronisation.
Applique les modifications incrémentielles à la base de données client.
Détecte les modifications conflictuelles.
Pour plus d'informations, consultez SqlCeClientSyncProvider et Procédure : spécifier la synchronisation par instantané, par téléchargement, par téléchargement ascendant et bidirectionnelle.
Fournisseur de synchronisation serveur
Le fournisseur de synchronisation serveur communique avec le serveur et protège l'agent de synchronisation contre l'implémentation spécifique de la base de données serveur. Les principales activités du fournisseur de synchronisation serveur sont les suivantes :
Stocke des informations sur les tables du serveur qui sont activées pour la synchronisation.
Permet aux applications de récupérer les modifications intervenues dans la base de données serveur depuis la dernière synchronisation.
Applique les modifications incrémentielles à la base de données serveur.
Détecte les modifications conflictuelles.
Pour plus d'informations, consultez DbServerSyncProvider et Procédure : spécifier la synchronisation par instantané, par téléchargement, par téléchargement ascendant et bidirectionnelle.
Table de synchronisation et groupe de synchronisation
Une table de synchronisation est définie pour chaque table qui est synchronisée. Elle stocke les paramètres, tels que la direction de la synchronisation. Chaque client peut demander uniquement les tables dont il a besoin. Il ne s'agit pas nécessairement de toutes les tables que le fournisseur de synchronisation serveur met à disposition. Par exemple, sur un total de 20 tables, 10 sont configurées pour la synchronisation bidirectionnelle dans le fournisseur de synchronisation serveur. Un client peut demander seulement 12 des tables sous forme de téléchargement uniquement. Bien que le serveur gère le téléchargement ascendant, le client n'est pas obligé d'effectuer des modifications ou de synchroniser toutes les tables. Pour plus d'informations, consultez SyncTable.
Une fois qu'une table de synchronisation est définie, il est possible de l'ajouter à un groupe de synchronisation. Un groupe de synchronisation est un mécanisme destiné à garantir l'application cohérente des modifications d'un ensemble de tables. Si les tables sont incluses dans un groupe de synchronisation, les modifications apportées à ces tables sont transférées sous la forme d'une unité et appliquées sur le serveur dans une transaction unique. Si des modifications échouent dans le groupe, les modifications du groupe entier sont de nouveau tentées lors de la synchronisation suivante. Pour plus d'informations, consultez SyncGroup et Procédure : spécifier la synchronisation par instantané, par téléchargement, par téléchargement ascendant et bidirectionnelle.
Adaptateur de synchronisation
L'adaptateur de synchronisation repose sur l'adaptateur de données de ADO.NET et est défini pour chaque table qui est synchronisée. Il transmet au fournisseur de synchronisation serveur les commandes spécifiques qui sont requises pour l'interaction avec la base de données serveur, telles que la propriété InsertCommand qui applique les insertions de la base de données client à la base de données serveur. Étant donné que les adaptateurs de synchronisation utilisent l'objet ADO.NET DbCommand, vous pouvez utiliser n'importe quelle structure de commande prise en charge par ADO.NET. Il peut s'agir, par exemple, de Transact-SQL Inline, de procédures stockées, de vues et de fonctions. Les commandes nécessitent uniquement un seul résultat qui définit la structure et les données à transférer et à appliquer. Pour plus d'informations, consultez SyncAdapter et Procédure : spécifier la synchronisation par instantané, par téléchargement, par téléchargement ascendant et bidirectionnelle.
Proxy, service et transport
Un proxy, un service et un transport sont utilisés dans les architectures multicouches et les architectures basées sur les services. Dans les applications multicouches, Microsoft.Synchronization.Data.Server.dll est utilisée mais elle ne réside pas sur le client. En principe, la DLL réside sur un niveau intermédiaire qui dispose d'une connexion directe à la base de données serveur. Dans ce cas, un proxy et un service sont nécessaires pour les communications entre le client et le niveau intermédiaire :
Sur le client, le code d'application désigne un proxy pour le fournisseur de synchronisation serveur (ServerSyncProviderProxy) au lieu de référencer directement le fournisseur. Le proxy communique avec un service sur le niveau intermédiaire.
Sur le niveau intermédiaire, le service hérite des méthodes de l'objet ServerSyncProvider (la classe abstraite dont DbServerSyncProvider hérite) et les expose. Les méthodes du fournisseur de synchronisation serveur sont ensuite exécutées via une connexion directe à la base de données serveur. Les résultats sont routés via le niveau intermédiaire et vers le client.
Pour plus d'informations, consultez Procédure : configurer la synchronisation multicouche.
Dans les applications basées sur les services, Microsoft.Synchronization.Data.Server.dll n'est pas utilisée sur le client. Le code d'application doit assurer les fonctions généralement fournies par le fournisseur de synchronisation serveur et les adaptateurs de synchronisation :
Sur le client, le code d'application désigne un proxy pour le code d'application qui gère les tâches du fournisseur de synchronisation serveur, telles que l'extraction des modifications à partir de la source de données. Le proxy communique avec un service sur le niveau intermédiaire.
Sur le niveau intermédiaire, le service hérite des méthodes de l'objet ServerSyncProvider (la classe abstraite dont DbServerSyncProvider hérite) et les expose. Les méthodes sont ensuite exécutées par le code de l'application via une connexion directe à la base de données serveur. Les résultats sont routés via le niveau intermédiaire et vers le client.
Classes supplémentaire dans l'API
Les illustrations de cette rubrique représentent les principales classes dans l'API. Toutefois, il existe de nombreuses classes qui ne sont pas affichées. Pour obtenir des informations sur toutes les classes disponibles, consultez Microsoft.Synchronization, Microsoft.Synchronization.Data, Microsoft.Synchronization.Data.SqlServerCe et Microsoft.Synchronization.Data.Server. Les sections suivantes présentent quatre autres classes importantes que vous devez connaître.
Ancre de synchronisation
Une ancre de synchronisation est un point de référence dans le temps pour un ensemble de tables qui sont synchronisées à partir du serveur. Les ancres de synchronisation permettent à une application de déterminer les modifications à synchroniser au cours d'une session spécifiée. Lors de la synchronisation, le fournisseur de synchronisation client stocke les points de référence suivants dans la base de données client :
- Dernière ancre reçue
Identifie la dernière modification qui a été téléchargée à partir du serveur.
- Dernière ancre envoyée
Identifie la dernière modification qui a été téléchargée du client vers le serveur.
Lors de la synchronisation qui suit, une application pourra utiliser ces ancres pour identifier le point de départ pour la synchronisation des modifications suivantes. Pour plus d'informations, consultez SyncAnchor et Suivi des modifications dans la base de données serveur.
Statistiques de session de synchronisation
Les statistiques de session sont un ensemble de statistiques que l'agent de synchronisation fournit pour chaque session de synchronisation. Les statistiques incluent des informations sur les temps de synchronisation, le nombre de modifications traitées et les exceptions ou les conflits qui se sont produits. Pour plus d'informations, consultez SyncStatistics et Procédure : travailler avec des événements et programmer la logique métier.
Variables de session de synchronisation
Les variables de session sont les variables qui sont fournies pour qu'un développeur les utilisent comme paramètres pour les commandes de sélection, d'insertion, de mise à jour et de suppression exécutées sur le serveur. Les variables peuvent être utilisées de plusieurs manières : pour assurer la prise en charge de la détection de conflit et pour éviter de télécharger les modifications plusieurs fois sur un client. Pour plus d'informations, consultez SyncSession et Procédure : utiliser des variables de session.
Générateur de l'adaptateur de synchronisation SQL Server
Le générateur de l'adaptateur de synchronisation repose sur le générateur de commande de ADO.NET ; il vous permet de créer du code pour les commandes de synchronisation qui sont exécutées par le fournisseur de synchronisation serveur. Le générateur de l'adaptateur de synchronisation produit des instructions SELECT, INSERT, UPDATE et DELETE pour les bases de données SQL Server. Ces instructions sont basées sur les informations que vous fournissez sur les tables qui prennent part à la synchronisation. Pour plus d'informations, consultez SqlSyncAdapterBuilder et Outils permettant de développer des applications.
Voir aussi
Concepts
Scénarios hors connexion
Mise en route : synchronisation client et serveur