Enumerar los cambios

Cuando un proveedor de origen responde a la solicitud GetChangeBatch (en el código administrado) o IKnowledgeSyncProvider::GetChangeBatch (en el código no administrado), su tarea es generar un lote de cambios que la réplica de destino no conoce. El proveedor de origen determina qué elementos de la réplica de origen no están contenidos en el objeto de conocimiento que el proveedor de destino envía y, a continuación, devuelve un lote de esos elementos.

Cada lote de cambios se compone de la información siguiente:

  • Los identificadores globales y las versiones de los elementos cambiados.

  • Los marcadores de exclusión que la réplica de destino debería conocer.

  • El conocimiento que da origen a los cambios. Se trata del conocimiento de la réplica de origen cuando se realizaron los cambios. Sync Framework calcula el conocimiento aprendido para el destino a partir del conocimiento que da origen a los cambios cuando el proveedor de destino los aplica.

  • Los conocimientos básicos previos. Se trata del conocimiento mínimo que una réplica de destino debe tener para procesar este lote de cambios. Si los conocimientos de la réplica de destino no contienen los conocimientos básicos previos, no puede procesar estos cambios.

  • El conocimiento olvidado de la réplica de origen. Se utiliza para detectar una réplica de destino obsoleta.

Enumeración de cambios entre dos réplicas

En esta sección se proporciona un escenario que describe el proceso de enumeración de los cambios entre dos réplicas utilizando las interfaces de conocimiento de Sync Framework.

Nota

   Una réplica es responsable de asegurarse de que los cambios que se realizan localmente se reflejen en su conocimiento antes de que un proveedor enumere los cambios. Para ello, se puede actualizar el conocimiento cuando se realiza un cambio local o se puede llevar a cabo un paso de mantenimiento de los metadatos antes de enumerar los cambios.

En este escenario, un proveedor de destino solicita los cambios del proveedor de origen. El orden de la solicitud es el siguiente:

  1. La réplica de destino se asegura de que todos los cambios que se realizaron localmente se reflejen en su conocimiento correspondiente al ámbito que se va a sincronizar con la réplica de origen.

  2. El proveedor de destino envía el conocimiento de la réplica de destino al proveedor de origen. El proveedor de origen recibe el conocimiento a través del método IKnowledgeSyncProvider::GetChangeBatch (en el código administrado) o GetChangeBatch (en el código no administrado).

  3. Para generar un lote de cambios, el proveedor de origen enumera los cambios y eliminaciones en la réplica de origen, y comprueba cada uno con el conocimiento de la réplica de destino. Un cambio solo se agrega al lote de cambios cuando no está incluido en los conocimientos de la réplica de destino. El lote de cambios se representa mediante el objeto ChangeBatch (en el código administrado) o la interfaz ISyncChangeBatch (en el código no administrado).

  4. El proveedor de origen devuelve el lote de cambios al proveedor de destino.

Nota

   Podría haber muchos cambios en un conjunto de cambios. Para dar tiempo a que se procese la lista de cambios entrantes, el proveedor de destino puede solicitar que los cambios se envíen en lotes devolviendo un número distinto de cero como tamaño del lote en su método GetSyncBatchParameters (en el código administrado) o GetSyncBatchParameters (en el código no administrado).

Cuando el proveedor de origen utiliza las unidades de cambio para representar los subelementos que se enumeran en la réplica de origen, solo envía las unidades de cambio que cambiaron, en lugar de todo el elemento. Para obtener más información, vea Sincronizar las unidades de cambio.

Tratar los cambios obsoletos

Cuando se construye un lote de cambios, los cambios obsoletos se excluyen automáticamente. Un cambio obsoleto es aquel que ya está incluido en el conocimiento de la réplica de destino y que no se debería aplicar en ella. Cuando un cambio se agrega a un lote de cambios, Sync Framework compara la versión del cambio con respecto al conocimiento de la réplica de destino y agrega el cambio únicamente si no está contenido en el conocimiento de la misma. De este modo se genera un lote de cambios mínimo, y se permite a los proveedores implementar un algoritmo más simple para enumerar los cambios, por ejemplo, uno basado en contadores.

Un proveedor puede realizar su propia comprobación de que los cambios que agrega a un lote de cambios no están obsoletos. Para ello, el proveedor determina si el identificador global y la versión del cambio están incluidos en el conocimiento de la réplica de destino. Esto se realiza mediante el método ISyncKnowledge::ContainsChange (en el código administrado) o Contains (en el código no administrado). Si el conocimiento no contiene el cambio, el proveedor lo agrega al lote de cambios. De este modo se genera un lote de cambios mínimo, que resulta de utilidad para los proveedores que desean mantener un control completo sobre la construcción del lote de cambios.

Vea también

Referencia

Interfaz ISyncKnowledge
Interfaz ISyncChangeBatch
Interfaz IKnowledgeSyncProvider
IKnowledgeSyncProvider::GetChangeBatch
SyncKnowledge
ChangeBatch
KnowledgeSyncProvider
GetChangeBatch

Conceptos

Proveedores de sincronización
Controlar los conflictos
Descripción del conocimiento de sincronización