Compartir a través de


Introducción al almacenamiento de metadatos

Metadata Storage Service ayuda a almacenar los metadatos de sincronización de un proveedor que representa una réplica que no puede almacenar los metadatos de otra manera. Metadata Storage Service utiliza una base de datos ligera que tiene una memoria y un disco de pequeño tamaño; se puede redistribuir junto con el proveedor y es confiable.

La API de Metadata Storage Service separa claramente el almacén de metadatos de las interfaces y los métodos que se utilizan para tener acceso al almacén, de modo que se puedan implementar almacenes alternativos y utilizar con un cambio mínimo del proveedor.

Nota

Las interfaces de Metadata Storage Service son de un solo subproceso. Las llamadas se pueden realizar en cualquier subproceso. Sin embargo, una aplicación multiproceso debe proporcionar la sincronización de subprocesos adecuada cuando utiliza estas interfaces.

Crear el almacén de metadatos

Metadata Storage Service proporciona una implementación de la API que utiliza una base de datos ligera para almacenar los metadatos en un archivo.

Código administrado: un objeto SqlMetadataStore representa un almacén de metadatos. Este objeto extiende la clase abstracta MetadataStore. Además de proporcionar los métodos de clase base para administrar los metadatos de la réplica y las transacciones, SqlMetadataStore proporciona métodos que permiten crear o abrir el propio almacén de metadatos. Para crear un almacén nuevo, llame a CreateStore. Para abrir un almacén de metadatos existente, llame a OpenStore.

Código no administrado: un objeto de interfaz ISqlSyncMetadataStore representa un almacén de metadatos. Este objeto extiende la interfaz ISyncMetadataStore. Además de proporcionar los métodos de interfaz base para administrar los metadatos de la réplica y las transacciones, ISqlSyncMetadataStore proporciona métodos que permiten crear o abrir el propio almacén de metadatos. Para crear un objeto ISqlSyncMetadataStore, pase CLSID_SyncMetadataStore y IID_ISqlSyncMetadataStore a CoCreateInstance. Para crear un almacén nuevo, llame a ISqlSyncMetadataStore::CreateStore. Para abrir un almacén de metadatos existente, llame a ISqlSyncMetadataStore::OpenStore.

Security noteSeguridad Nota

El archivo de metadatos no está protegido contra el acceso no autorizado. Para proteger el archivo de metadatos, la carpeta que lo contiene se debe proteger correctamente, por ejemplo mediante una Lista de control de acceso discrecional (DACL). Cuando el archivo de metadatos está almacenado en una ubicación remota, se debe proteger apropiadamente el canal de comunicación entre Metadata Storage Service y la carpeta remota. Para que el usuario pueda eliminar el archivo de metadatos, el proveedor que crea el citado archivo debe colocarlo en algún lugar al que el usuario pueda tener acceso. El proveedor que crea el archivo de metadatos debe eliminarlo cuando se desinstala el proveedor.

Security noteSeguridad Nota

Cuando Sync Framework abre el archivo de metadatos mediante un mecanismo remoto, como una ruta de acceso UNC, ninguna otra aplicación de cualquier equipo puede tener acceso a este archivo simultáneamente, incluso una aplicación del equipo donde está almacenado el citado archivo.

Metadatos de la réplica

Para poder usar los metadatos de la réplica, se deben inicializar. Los metadatos de la réplica se pueden inicializar una sola vez para cada almacén de metadatos. Si se necesitan índices o campos personalizados, se deben definir cuando se inicializan los metadatos de la réplica.

Código administrado: para inicializar los metadatos de la réplica, llame a InitializeReplicaMetadata.

Código no administrado: para inicializar los metadatos de la réplica, llame a ISyncMetadataStore::InitializeReplicaMetadata.

Para tener acceso a los metadatos de la réplica de un almacén existente, se debe obtener un objeto de metadatos de réplica. Hay un objeto de metadatos de réplica diferente para cada identificador de réplica. Sin embargo, tenga en cuenta que Metadata Storage Service evita las actualizaciones simultáneas del almacén de metadatos, ya que solo permite que exista un único objeto de metadatos de réplica a la vez para cada identificador de réplica. Si ya existe una instancia del objeto de metadatos de réplica para un identificador de réplica especificado, en el proceso que está intentando abrirlo se devolverá una referencia al objeto existente. Si ya existe una instancia del objeto de metadatos de réplica para un identificador de réplica especificado, el intento no tendrá éxito si el proceso no es el que intenta abrir el objeto.

Código administrado: para obtener un objeto de metadatos de réplica, llame a GetReplicaMetadata.

Código no administrado: para obtener un objeto de metadatos de réplica, llame a ISyncMetadataStore::GetReplicaMetadata.

El objeto de metadatos de réplica proporciona métodos para tener acceso a los metadatos de una réplica y a los elementos contenidos en la réplica. Para obtener más información, vea Acceso a los metadatos de una réplica.

Campos de elemento personalizados

Se puede definir un conjunto de campos personalizados para los metadatos del elemento. Cada campo está compuesto por un nombre de cadena único y un valor. Si existen metadatos adicionales relacionados con un elemento que no son admitidos por el conjunto predeterminado de metadatos del elemento, pueden almacenarse en estos campos. Se puede tener acceso a los campos a través de varios métodos en ItemMetadata (en el código administrado) o IItemMetadata (en el código no administrado). Estos campos y su formato, incluido el tamaño y el tipo de datos, se definen cuando el almacén de metadatos de réplica se inicializa.

Código administrado: los campos personalizados se especifican pasando un objeto FieldSchema a InitializeReplicaMetadata.

Código no administrado: los campos personalizados se especifican pasando una matriz de objetos CUSTOM_FIELD_DEFINITION a ISyncMetadataStore::InitializeReplicaMetadata.

Esquemas de índice

Se puede definir un conjunto de esquemas de índice para que los conjuntos de campos personalizados se puedan usar como índices con el fin de buscar eficazmente elementos en el almacén de metadatos. Un esquema de índice se puede definir como único para asegurarse de que el índice define un solo elemento. Cada uno de los campos contenidos en un esquema de índice también debe existir en el esquema de campos personalizados definido para la réplica.

Código administrado: los esquemas de índice se especifican pasando un objeto IndexSchema a InitializeReplicaMetadata.

Código no administrado: los esquemas de índice se especifican pasando una matriz de objetos CUSTOM_FIELDS_INDEX a ISyncMetadataStore::InitializeReplicaMetadata.

Transacciones

Las transacciones existen implícita o explícitamente. Las transacciones implícitas sólo se admiten para leer los datos del almacén de metadatos. Si se intenta escribir en el almacén de metadatos sin iniciar una transacción explícita primero, se lanzará una excepción ExplicitTransactionRequiredException (en el código administrado) o devolverá SYNC_E_METADATA_ACTIVE_TRANSACTION_REQUIRED (en el código no administrado).

Para establecer los metadatos utilizando código administrado

  1. Inicie una transacción explícita llamando a BeginTransaction. Confirme los cambios que se realizaron durante la transacción llamando a CommitTransaction. Descarte los cambios que se realizaron durante la transacción llamando a RollbackTransaction.

  2. Establezca las propiedades en el objeto ItemMetadata o ReplicaMetadata.

  3. Guarde las propiedades utilizando SaveReplicaMetadata o SaveItemMetadata.

Para establecer los metadatos utilizando código no administrado

  1. Inicie una transacción explícita llamando a ISyncMetadataStore::BeginTransaction. Confirme los cambios que se realizaron durante la transacción llamando a ISyncMetadataStore::CommitTransaction. Descarte los cambios que se realizaron durante la transacción llamando a ISyncMetadataStore::RollbackTransaction.

  2. Establezca las propiedades en el objeto IItemMetadata o IReplicaMetadata.

  3. Guarde las propiedades utilizando IReplicaMetadata::SaveReplicaMetadata o IReplicaMetadata::SaveItemMetadata.

Nota

Este servicio de transacción sólo se aplica a los metadatos que están almacenados en el almacén de metadatos. Ningún dato de elemento que esté guardado en el almacén de elementos en la réplica se incluye en esta transacción.

Vea también

Referencia

Interfaz ISqlSyncMetadataStore
Estructura CUSTOM_FIELD_DEFINITION
Interfaz IReplicaMetadata
Interfaz IItemMetadata
Estructura CUSTOM_FIELDS_INDEX
SqlMetadataStore
FieldSchema
ReplicaMetadata
ItemMetadata
IndexSchema

Otros recursos

Sync Framework Metadata Storage Service