Principes de base de la synchronisation de données

Microsoft Sync Framework synchronise des magasins de données, ou réplicas, en utilisant trois composants de base : une session de synchronisation et deux fournisseurs de synchronisation. Pour synchroniser des données, une application crée une session de synchronisation et lui transmet un fournisseur de source et un fournisseur de destination. La session utilise le fournisseur de source pour obtenir les nouvelles modifications qui se sont produites sur le réplica source et utilise le fournisseur de destination pour appliquer ces modifications au réplica de destination.

La création d'un fournisseur requiert le plus de travail de développement. Un fournisseur gère les métadonnées et connaissances pour le réplica ainsi que les métadonnées pour chaque élément à synchroniser. Un fournisseur transfère également les données d'élément réelles vers et depuis son magasin de données. Un fournisseur utilise les composants Sync Framework pour mieux énumérer les modifications lorsque le fournisseur agit comme une source ainsi que pour détecter les conflits et appliquer des modifications lorsqu'il agit comme une destination.

Algorithme de synchronisation

L'algorithme pour une synchronisation unidirectionnelle inclut les étapes suivantes :

  1. La session obtient la connaissance actuelle du réplica de destination et l'envoie au fournisseur de source.

  2. Le fournisseur de source énumère les modifications qui ne sont pas contenues dans la connaissance de destination.

  3. Le fournisseur de source envoie les modifications à la session.

  4. La session détecte les conflits et applique les modifications au réplica de destination par le biais du fournisseur de destination.

La synchronisation bidirectionnelle entre deux réplicas est effectuée par deux synchronisations unidirectionnelles.

Code managé L'objet SyncOrchestrator effectue deux synchronisations unidirectionnelles lorsque la propriété Direction a la valeur DownloadAndUpload ou UploadAndDownload.

Code non managé L'application doit créer un objet ISyncSession pour chaque synchronisation unidirectionnelle.

Gestion des métadonnées

Chaque réplica doit fournir un jeu de métadonnées qui apporte sa propre description ainsi qu'une description de sa connaissance à la communauté de synchronisation. (Une communauté de synchronisation est un jeu de réplicas qui peuvent se synchroniser entre eux.) Les métadonnées requises pour chaque réplica sont : l'ID de réplica, le nombre de cycles actuel, le mappage de clés de réplica, la connaissance actuelle, la connaissance oubliée, un journal des conflits et un journal tombstone. Un réplica doit également gérer les métadonnées pour chaque élément à synchroniser. Les métadonnées requises pour chaque élément sont l'ID global, la version actuelle et la version de création. En général, le fournisseur de synchronisation gère les métadonnées requises pour la synchronisation. Toutefois, selon l'implémentation du réplica, il peut être plus utile pour certaines parties de la gestion des métadonnées d'être effectuée par un composant séparé, tel qu'un service qui nettoie des objets tombstone à des heures planifiées et non pendant la synchronisation.

Pour plus d'informations sur les métadonnées, consultez Spécifications des métadonnées.

Fournisseurs de synchronisation

Le fournisseur gère les métadonnées pour un réplica et utilise Sync Framework pour énumérer les modifications et détecter les conflits. Le fournisseur utilise également le magasin d'éléments d'un réplica pour envoyer des données d'élément lorsque le fournisseur agit comme fournisseur de source et pour appliquer des modifications lorsque le fournisseur agit comme fournisseur de destination.

Code managé Un fournisseur implémente les méthodes et propriétés abstraites de KnowledgeSyncProvider, IChangeDataRetriever et INotifyingChangeApplierTarget.

Code non managé Un fournisseur implémente les interfaces IKnowledgeSyncProvider, ISyncProvider, ISynchronousDataRetriever et ISynchronousNotifyingChangeApplierTarget (ou, pour les fournisseurs asynchrones, les versions asynchrones).

Pour plus d'informations sur les fournisseurs de synchronisation ainsi que sur l'implémentation et l'utilisation de ces interfaces, consultez Fournisseurs de synchronisation.

Applications de synchronisation

L'application est le composant qui crée l'objet de session de synchronisation, le connecte aux fournisseurs et héberge le runtime de synchronisation.

Implémentation d'une application de synchronisation en utilisant le code managé

Pour démarrer la synchronisation, créez un objet SyncOrchestrator. Définissez ensuite les propriétés LocalProvider et RemoteProvider en fonction des interfaces SyncProvider des deux fournisseurs à synchroniser. L'application obtient ou crée les interfaces de fournisseur en utilisant une méthode appropriée. Après avoir créé l'objet SyncOrchestrator, appelez Synchronize pour démarrer la synchronisation. À ce stade, Sync Framework effectue tous les appels nécessaires dans les deux fournisseurs pour effectuer la synchronisation.

Les objets SyncOrchestrator et KnowledgeSyncProvider déclenchent tous deux des événements pendant la synchronisation. Pour recevoir un événement, implémentez une méthode de gestionnaire d'événements et procédez à l'inscription pour recevoir l'événement.

Implémentation d'une application de synchronisation en utilisant le code non managé

Pour démarrer la synchronisation, créez un objet ISyncSession en passant CLSID_SyncServices et IID_IApplicationSyncServices à la fonction CoCreateInstance, puis appelez IApplicationSyncServices::CreateSyncSession sur l'objet IApplicationSyncServices retourné.

La méthode CreateSyncSession requiert les interfaces ISyncProvider des deux fournisseurs à synchroniser. L'application obtient ou crée les interfaces de fournisseur en utilisant une méthode appropriée. Après avoir créé l'objet ISyncSession, appelez ISyncSession::Start pour démarrer la synchronisation. À ce stade, Sync Framework effectue tous les appels nécessaires dans les deux fournisseurs pour effectuer la synchronisation.

L'objet ISyncSession déclenche des événements pendant la synchronisation. Pour recevoir des événements, implémentez l'interface ISyncCallback et inscrivez-la en utilisant ISyncSession::RegisterCallback.

Voir aussi

Référence

Interface ISyncSession
Interface ISyncProvider
Interface IKnowledgeSyncProvider
Interface ISynchronousDataRetriever
Interface ISynchronousNotifyingChangeApplierTarget
Interface IApplicationSyncServices
Interface IProviderSyncServices
Interface ISyncCallback
SyncOrchestrator
KnowledgeSyncProvider
IChangeDataRetriever
INotifyingChangeApplierTarget
SyncCallbacks

Concepts

Spécifications des métadonnées
Fournisseurs de synchronisation
Applications de synchronisation

Autres ressources

Microsoft Sync Framework