Partager via


Mise en route du stockage des métadonnées

Le service de stockage des métadonnées permet de stocker les métadonnées de synchronisation pour un fournisseur qui représente un réplica qui ne peut autrement pas stocker de métadonnées. Le service de stockage des métadonnées utilise une base de données légère et fiable qui a une mémoire et un encombrement disque peu importants, et qui peut être redistribuée avec le fournisseur.

L'API du service de stockage des métadonnées sépare clairement le magasin des métadonnées des interfaces et méthodes utilisées pour accéder au magasin des métadonnées afin que d'autres magasins puissent être implémentés et utilisés avec peu de modifications au niveau du fournisseur.

Notes

Les interfaces du service de stockage des métadonnées sont à thread unique. Des appels peuvent être effectués sur n'importe quel thread. Toutefois, une application multithread doit fournir une synchronisation de threads appropriée lorsqu'elle utilise ces interfaces.

Création du magasin des métadonnées

Le service de stockage des métadonnées fournit une implémentation de l'API qui utilise une base de données légère pour stocker les métadonnées dans un fichier.

Code managé Un magasin des métadonnées est représenté par un objet SqlMetadataStore. Cet objet étend la classe abstraite MetadataStore. En plus de fournir les méthodes de classe de base pour gérer des métadonnées de réplica et des transactions, SqlMetadataStore fournit des méthodes pour créer ou ouvrir le magasin des métadonnées lui-même. Pour créer un magasin, appelez CreateStore. Pour ouvrir un magasin existant, appelez OpenStore.

Code non managé Un magasin des métadonnées est représenté par un objet d'interface ISqlSyncMetadataStore. Cet objet étend l'interface ISyncMetadataStore. En plus de fournir les méthodes d'interface de base pour gérer des métadonnées de réplica et des transactions, ISqlSyncMetadataStore fournit des méthodes pour créer ou ouvrir le magasin des métadonnées lui-même. Pour créer un objet ISqlSyncMetadataStore, passez CLSID_SyncMetadataStore et IID_ISqlSyncMetadataStore à CoCreateInstance. Pour créer un magasin, appelez ISqlSyncMetadataStore::CreateStore. Pour ouvrir un magasin existant, appelez ISqlSyncMetadataStore::OpenStore.

Security noteSécurité Remarque

Le fichier de métadonnées n'est pas sécurisé contre tout accès non autorisé. Pour protéger le fichier de métadonnées, le dossier qui le contient doit être sécurisé correctement, par exemple en utilisant une liste de contrôle d'accès discrétionnaire (DACL, Discretionary Access Control List). Lorsque le fichier de métadonnées est stocké à un emplacement distant, le canal de communication entre le service de stockage des métadonnées et le dossier distant doit être convenablement sécurisé. Pour permettre à l'utilisateur de supprimer le fichier de métadonnées, le fournisseur qui crée ce fichier doit le placer dans un emplacement accessible par l'utilisateur. Le fournisseur qui crée le fichier de métadonnées doit supprimer ce fichier lorsque le fournisseur est désinstallé.

Security noteSécurité Remarque

Lorsque Sync Framework ouvre le fichier de métadonnées par un mécanisme distant, tel qu'un chemin d'accès UNC, le fichier de métadonnées ne peut pas faire l'objet d'un accès simultané par une autre application d'un ordinateur, notamment une application sur l'ordinateur sur lequel le fichier de métadonnées est stocké.

Métadonnées de réplica

Les métadonnées de réplica doivent être initialisées avant de pouvoir être utilisées. Les métadonnées de réplica peuvent être initialisées une seule fois pour chaque magasin des métadonnées. Si des champs personnalisés ou index sont requis, ils doivent être définis lorsque les métadonnées de réplica sont initialisées.

Code managé Initialisez les métadonnées de réplica en appelant InitializeReplicaMetadata.

Code non managé Initialisez les métadonnées de réplica en appelant ISyncMetadataStore::InitializeReplicaMetadata.

Pour accéder aux métadonnées de réplica dans un magasin existant, un objet des métadonnées du réplica doit être obtenu. Un objet des métadonnées du réplica différent existe pour chaque ID de réplica. Toutefois, gardez à l'esprit que le service de stockage des métadonnées protège le magasin des métadonnées contre des mises à jour simultanées en autorisant l'existence d'un seul objet des métadonnées du réplica à la fois pour chaque ID de réplica. Si une instance de l'objet des métadonnées du réplica existe déjà pour un ID de réplica spécifié dans le processus qui essaie de l'ouvrir, une référence à l'objet existant sera retournée. Si une instance de l'objet des métadonnées du réplica existe déjà pour un ID de réplica spécifié dans un processus autre que celui qui essaie de l'ouvrir, la tentative échoue.

Code managé Procurez-vous un objet des métadonnées du réplica en appelant GetReplicaMetadata.

Code non managé Procurez-vous un objet des métadonnées du réplica en appelant ISyncMetadataStore::GetReplicaMetadata.

L'objet des métadonnées du réplica fournit des méthodes pour accéder aux métadonnées pour un réplica et pour les éléments contenus dans le réplica. Pour plus d'informations, consultez Accès aux métadonnées de réplica.

Champs d'éléments personnalisés

Un ensemble de champs personnalisés peut être défini pour les métadonnées d'élément. Chaque champ consiste en un nom de chaîne unique et une valeur. Ces champs peuvent être utilisés pour stocker des métadonnées supplémentaires concernant un élément qui n'est pas pris en charge par l'ensemble par défaut de métadonnées d'élément. Les champs sont accessibles par le biais de différentes méthodes sur ItemMetadata (pour le code managé) ou IItemMetadata (pour le code non managé). Ces champs et leur format, y compris la taille et le type de données, sont définis lorsque les métadonnées de réplica sont initialisées.

Code managé Spécifiez des champs personnalisés en passant un objet FieldSchema à InitializeReplicaMetadata.

Code non managé Spécifiez des champs personnalisés en passant un tableau d'objets CUSTOM_FIELD_DEFINITION à ISyncMetadataStore::InitializeReplicaMetadata.

Schémas d'index

Un ensemble de schémas d'index peut être défini afin que les ensembles de champs personnalisés puissent être utilisés comme index pour rechercher efficacement des éléments dans le magasin des métadonnées. Un schéma d'index peut être défini comme étant unique afin de garantir que l'index définit un seul élément. Chaque champ contenu dans un schéma d'index doit également exister dans le schéma de champ personnalisé qui est défini pour le réplica.

Code managé Spécifiez des schémas d'index en passant un objet IndexSchema à InitializeReplicaMetadata.

Code non managé Spécifiez des schémas d'index en passant un tableau d'objets CUSTOM_FIELDS_INDEX à ISyncMetadataStore::InitializeReplicaMetadata.

Transactions

Les transactions existent de façon implicite ou explicite. Les transactions implicites sont prises en charge uniquement pour lire des données du magasin des métadonnées. Une tentative d'écriture dans le magasin des métadonnées sans démarrer d'abord une transaction explicite lève ExplicitTransactionRequiredException (pour le code managé) ou retourne SYNC_E_METADATA_ACTIVE_TRANSACTION_REQUIRED (pour le code non managé).

Pour définir les métadonnées à l'aide de code managé

  1. Démarrez une transaction explicite en appelant BeginTransaction. Validez les modifications apportées pendant la transaction en appelant CommitTransaction. Ignorez les modifications apportées pendant la transaction en appelant RollbackTransaction.

  2. Définissez des propriétés sur un objet ReplicaMetadata ou ItemMetadata.

  3. Enregistrez les propriétés à l'aide de SaveReplicaMetadata ou SaveItemMetadata.

Pour définir les métadonnées à l'aide de code non managé

  1. Démarrez une transaction explicite en appelant ISyncMetadataStore::BeginTransaction. Validez les modifications apportées pendant la transaction en appelant ISyncMetadataStore::CommitTransaction. Ignorez les modifications apportées pendant la transaction en appelant ISyncMetadataStore::RollbackTransaction.

  2. Définissez les propriétés sur un objet IReplicaMetadata ou IItemMetadata.

  3. Enregistrez les propriétés à l'aide d'IReplicaMetadata::SaveReplicaMetadata ou d'IReplicaMetadata::SaveItemMetadata.

Notes

Ce service de transaction s'applique uniquement aux métadonnées stockées dans le magasin des métadonnées. Toute donnée d'élément enregistrée dans le magasin d'éléments sur le réplica n'est pas incluse dans cette transaction.

Voir aussi

Référence

Interface ISqlSyncMetadataStore
Structure CUSTOM_FIELD_DEFINITION
Interface IReplicaMetadata
Interface IItemMetadata
Structure CUSTOM_FIELDS_INDEX
SqlMetadataStore
FieldSchema
ReplicaMetadata
ItemMetadata
IndexSchema

Autres ressources

Metadata Storage Service de Sync Framework