Este artículo proviene de un motor de traducción automática.

En sincronización

Creación de proveedores de sincronización con el marco de sincronización

Joydip Kanjilal

Descargar el ejemplo de código

Microsoft Sync Framework es una completa plataforma para sincronizar datos con y sin conexión y facilita la colaboración y de acceso sin conexión para las aplicaciones, servicios y dispositivos similares.Es independiente del protocolo y de la base de datos y incluye tecnologías y herramientas que permiten a dispositivos móviles, uso compartido y la capacidad de tomar datos red sin conexión antes de sincronizarlo de nuevo más adelante en el tiempo.

Framework de la sincronización se puede utilizar para crear aplicaciones que sincronización los datos de cualquier almacén de datos mediante cualquier protocolo a través de una red.Es una plataforma de sincronización completa que facilita el acceso de datos con y sin conexión para las aplicaciones, servicios y dispositivos.Framework de la sincronización tiene un modelo de proveedor extensible y se puede utilizar con código administrado y sincronizar datos entre los dos orígenes de datos.

En este artículo analiza en los conceptos de sincronización y cómo el marco de sincronización se puede integrar en sus propios proyectos.En concreto, le se tratan los aspectos básicos de la sincronización de datos, los componentes de arquitectura del marco de sincronización y la utilización de los proveedores de sincronización.

Para trabajar con el marco de sincronización y los ejemplos de código en este artículo, es necesario instalar 2010 de Visual Studio y el tiempo de ejecución de Sync Framework 2.0 o posterior.El tiempo de ejecución con el paquete redistribuible de Microsoft Sync Framework 2.0 se puede descargar desde el Sync Framework Developer Center.

Conceptos básicos de Framework de sincronización

Framework de la sincronización compone de cuatro componentes principales: un tiempo de ejecución, servicios de metadatos, los proveedores de sincronización y los participantes.

El tiempo de ejecución de Sync Framework ofrece la infraestructura para sincronizar datos entre orígenes de datos.También proporciona un SDK que los desarrolladores pueden ampliar para implementar proveedores personalizados.

Los servicios de los metadatos proporcionan la infraestructura para almacenar metadatos de sincronización, que contiene información utilizada durante una sesión de sincronización.Los metadatos de sincronización incluyen las versiones, los delimitadores y cambiar la información de detección.También utilizará los metadatos de sincronización en el diseño y desarrollo de proveedores personalizados.

Los proveedores de sincronización se utilizan para sincronizar datos entre réplicas o extremos.Una réplica es una unidad de sincronización y se utiliza para denotar el almacén de datos real.Por ejemplo, si va a sincronizar datos entre dos bases de datos, a continuación, cada una de las bases de datos se denomina una réplica.Una réplica se identifica mediante un identificador único que se llama a una clave de la réplica.Un extremo aquí también hace referencia a un almacén de datos.Hablaré sobre los proveedores con más detalle más adelante en el artículo.

Un participante se refiere a la ubicación donde se pueden recuperar los datos se sincronicen.Puede tratarse de participantes completos, los participantes parciales y los participantes sencillos.

Participantes completos son dispositivos que se pueden crear nuevos almacenes de datos, almacenar la información de metadatos de sincronización y ejecutar aplicaciones de sincronización en los propios dispositivos.Los equipos de escritorio, portátiles y Tablet PC son ejemplos de participantes completos.Un participante completo puede sincronizar datos con otro participante.

Los participantes parciales son dispositivos que se pueden crear nuevos almacenes de datos y almacenar la información de metadatos de sincronización, pero no se pueden ejecutar aplicaciones en sus propios.Un dispositivo de almacenamiento USB o smartphone, podría ser un participante parcial.Tenga en cuenta que un participante parcial puede sincronizar datos con un participante completo, pero no con otro participante parcial.

Los participantes sencillos son dispositivos que no se pueden almacenar nuevos datos o ejecutar aplicaciones, pero sólo puede proporcionar la información solicitada.Las fuentes RSS y servicios Web de Google de Amazon y algunos ejemplos de los participantes sencillos.

Proveedores de sincronización

Un proveedor de sincronización es un componente que puede participar en un proceso de sincronización y permite que una réplica a los datos de la sincronización con otras réplicas.Debe tener un proveedor de sincronización por réplica.

Para sincronizar los datos, se inicia una sesión de sincronización.La aplicación conecta a los proveedores de sincronización de origen y destino en la sesión de sincronización de datos entre las réplicas.

Cuando una sesión de sincronización en curso, el proveedor de destino proporciona información acerca de su almacén de datos para el proveedor de código fuente.El proveedor de origen determina qué cambios a la réplica de origen no se sabe que la réplica de destino y, a continuación, inserta la lista de dichos cambios para el proveedor de destino.El proveedor de destino, a continuación, detecta cualquier conflicto entre sus propios elementos y los que se encuentra en la lista y, a continuación, aplica los cambios en su almacén de datos.El motor de marco de sincronización facilita parcialmente este proceso de sincronización.

Sync Framework ofrece compatibilidad con tres proveedores predeterminado para la base de datos, el sistema de archivos y la sincronización de alimentación:

  • Proveedor de sincronización para orígenes de datos con ADO.NET
  • Proveedor de sincronización para las fuentes RSS y Atom
  • Proveedor de sincronización de archivos y carpetas

También puede ampliar el marco de sincronización para crear su propio proveedor de sincronización personalizados para intercambiar información entre dispositivos y aplicaciones.

El proveedor de sincronización de base de datos (denominado anteriormente Servicios de sincronización para ADO.NET en Sync Framework 1.0) admite la sincronización de los orígenes de datos con ADO.NET.Se pueden crear aplicaciones de datos desconectada que facilitan la sincronización entre orígenes de datos con ADO.NET, como SQL Server.Permite que los móviles, uso compartido y poner fuera de conexión de datos.Cualquier base de datos que utiliza el proveedor de la base de datos puede participar en el proceso de sincronización con otros orígenes de datos que son compatibles con el marco de sincronización, incluidos los sistemas de archivos, servicios Web o incluso personalizado los almacenes de datos.

El proveedor de sincronización Web (anteriormente Servicios de sincronización para FeedSync) admite la sincronización de las fuentes RSS y ATOM.Antes de FeedSync, esta tecnología se conocía como extensiones de uso compartido simple y se diseñó originalmente por Ray Ozzie.Tenga en cuenta que el proveedor de sincronización Web no sustituye a las tecnologías existentes como RSS o Atom de fuentes.En su lugar, proporciona una manera sencilla de agregar las capacidades de sincronización para RSS o Atom fuentes existentes para que puede utilizar otras aplicaciones o servicios independientemente de la plataforma o dispositivo en uso.

El proveedor de sincronización de archivos (anteriormente Servicios de sincronización para los sistemas de archivos) es compatible con la sincronización de archivos y carpetas del sistema.Se puede usar para sincronizar los archivos y carpetas en el mismo sistema o a través de sistemas en la red.Puede sincronizar los archivos y carpetas en sistemas con NTFS, FAT o sistemas de archivos SMB.El proveedor utiliza el modelo de metadatos del marco de sincronización para habilitar la sincronización de punto a punto de datos de archivo con el soporte técnico para las topologías arbitrarias (cliente/servidor, malla completa y peer-to-peer) incluida la compatibilidad con medios extraíbles.El proveedor de sincronización de archivos también permite la sincronización incremental, la detección de conflictos y cambios, la sincronización en los modos de vista previa y de que no sean de vista previa de la operación y el filtrado y se omitirá los archivos en el proceso de sincronización.

Trabajar con proveedores integrados de sincronización

En esta sección le mostraré cómo trabajar con los proveedores de sincronización integrada para implementar una aplicación sencilla que sincroniza el contenido de las dos carpetas del sistema.

La clase FileSyncProvider puede utilizarse para crear un proveedor de sincronización de archivos.Esta clase extiende la clase UnManagedSyncProvider y implementa la interfaz IDisposable.La clase FileSyncScopeFilter se utiliza para incluir o excluir archivos y carpetas que participarán en el proceso de sincronización.

FileSyncProvider detecta los cambios de réplica con los metadatos de sincronización.Los metadatos de sincronización contienen información acerca de todos los archivos y carpetas que participan en el proceso de sincronización.Existen realmente dos tipos de metadatos de sincronización: los metadatos de réplica y los metadatos del elemento.El proveedor de sincronización de archivos almacena los metadatos para todos los archivos y carpetas que participan en el proceso de sincronización.Posteriormente, utiliza el tamaño de archivo, atributos y el último acceso en horas de estos archivos y carpetas para detectar los cambios.

Abra 2010 de Visual Studio y cree un nuevo proyecto de Windows Presentation Foundation (WPF).Guarde el proyecto con el nombre SyncFiles.Abra el archivo MainWindow.xaml y crear un formulario WPF similar a la que se muestra en de figura 1.

image: The Sample Sync App

Figura 1 de la aplicación de sincronización de ejemplo

Como puede ver, dispone de controles para seleccionar las carpetas de origen y destino.También se incluyen controles para mostrar las estadísticas de sincronización y el contenido de la fuente y las carpetas de destino.

Con el botón secundario en el proyecto en el Explorador de soluciones, haga clic en Agregar referencia y agregue los ensamblados de Microsoft.Synchronization.

Ahora puede agregar un nuevo método GetReplicaID MainWindow.xaml.cs de archivo para devolver un GUID, tal como se muestra en el código en de figura 2.El método Synchronize, cuando se llama en la instancia de SyncOrchestrator, crea un archivo de metadatos denominado filesync.metadata en cada una de las carpetas de réplicas mediante el GUID único.El método GetReplicaID conserva este GUID en un archivo para que la siguiente llamada a este método no genera un GUID nuevo para esa carpeta concretamente.El método GetReplicaID comprueba primero si existe el archivo que contiene un identificador de réplica.Si no se encuentra el archivo, se crea un nuevo ID. de réplica y se almacena en el archivo.Si el archivo existe (debido a un ID. de réplica de esa carpeta generado anteriormente), devuelve el identificador de réplica del archivo.

La figura 2 de GetReplicaID

private Guid GetReplicaID(string guidPath) {
  if (!File.Exists(guidPath)) {
    Guid replicaID = Guid.NewGuid();
    using (FileStream fileStream = 
      File.Open(guidPath, FileMode.Create)) {
      using (StreamWriter streamWriter = 
        new StreamWriter(fileStream)) {

        streamWriter.WriteLine(replicaID.ToString());
      }
    }

    return replicaID;
  }
  else {
    using (FileStream fileStream = 
      File.Open(guidPath, FileMode.Open)) {
      using (StreamReader streamReader = 
        new StreamReader(fileStream)) {

        return new Guid(streamReader.ReadLine());
      }
    }
  }
}

A continuación, agregue un método denominado GetFilesAndDirectories para devolver una lista de los archivos y carpetas en la ubicación de la réplica (consulte de figura 3). El nombre de la carpeta se debe pasar a él como un parámetro.

La figura 3 de obtención de la archivos de réplica y carpetas

private List<string> GetFilesAndDirectories(String directory) {
  List<String> result = new List<String>();
  Stack<String> stack = new Stack<String>();
  stack.Push(directory);

  while (stack.Count > 0) {
    String temp = stack.Pop();

    try {
      result.AddRange(Directory.GetFiles(temp, "*.*"));

      foreach (string directoryName in 
        Directory.GetDirectories(temp)) {
        stack.Push(directoryName);
      }
    }
    catch {
      throw new Exception("Error retrieving file or directory.");
    }
  }

  return result;
}

Este método se usaría para mostrar la lista de archivos y carpetas dentro de las carpetas de origen y destino antes y después del proceso de sincronización. Los métodos PopulateSourceFileList y PopulateDestinationFileList llaman GetFilesAndDirectories para rellenar los cuadros de lista que se muestran los archivos y directorios dentro de las carpetas de origen y destino (vea el código de descarga para obtener más información).

El btnSource_Click y los controladores de eventos btnDestination_Click se utilizan para seleccionar el origen y las carpetas de destino. Ambos métodos asegurarse de que la FolderBrowser de clase para mostrar un cuadro de diálogo desde donde el usuario puede seleccionar las carpetas de origen o destino. El código fuente completo de la clase FolderBrowser está disponible para su descarga con la descarga de código de este artículo.

Ahora tengo que escribir el controlador del evento Click del control Button, que se inicia si se deshabilita el botón antes de que comience la sincronización. A continuación, llama al método Synchronize con las rutas de acceso de origen y destino como parámetros. Por último, inicia el proceso de sincronización, detectar los errores y habilitar el botón cuando se complete la sincronización:

btnSyncFiles.IsEnabled = false; 
// Disable the button before synchronization starts
Synchronize(sourcePath, destinationPath);
btnSyncFiles.IsEnabled = true; 
// Enable the button after synchronization is complete

El método Synchronize, acepta la ruta de acceso de origen y destino y sincroniza el contenido de las dos réplicas. En el método Synchronize, toman una instancia de la clase SyncOperationStatistics para recuperar la información estadística sobre el proceso de sincronización:

SyncOperationStatistics syncOperationStatistics;

I también crea el origen y destino de los proveedores de sincronización, crear una instancia de SyncOrchestrator denominada synchronizationAgent, asignar los identificadores GUID para las réplicas de origen y destino y conecte los dos proveedores al mismo. El SyncOrchestrator es responsable de coordinar la sesión de sincronización:

sourceReplicaID = 
  GetReplicaID(Path.Combine(source,"ReplicaID"));
destinationReplicaID = 
  GetReplicaID(Path.Combine(destination,"ReplicaID"));

sourceProvider = 
  new FileSyncProvider(sourceReplicaID, source);
destinationProvider = 
  new FileSyncProvider(destinationReplicaID, destination); 

SyncOrchestrator synchronizationAgent = 
  new SyncOrchestrator();
synchronizationAgent.LocalProvider = sourceProvider;
synchronizationAgent.RemoteProvider = destinationProvider;

Por último, inicia el proceso de sincronización, detectar los errores y liberar los recursos según sea necesario, como se muestra en de figura 4. La descarga de código de este artículo incluye el proyecto de código fuente completo con el control de errores y otros detalles de implementación.

La figura 4 de la sincronización de réplicas

try {
  syncOperationStatistics = synchronizationAgent.Synchronize(); 

  // Assign synchronization statistics to the lstStatistics control
  lstStatistics.Items.Add("Download Applied: " + 
    syncOperationStatistics.DownloadChangesApplied.ToString());
  lstStatistics.Items.Add("Download Failed: " + 
    syncOperationStatistics.DownloadChangesFailed.ToString());
  lstStatistics.Items.Add("Download Total: " + 
    syncOperationStatistics.DownloadChangesTotal.ToString());
  lstStatistics.Items.Add("Upload Total: " + 
    syncOperationStatistics.UploadChangesApplied.ToString());
  lstStatistics.Items.Add("Upload Total: " + 
    syncOperationStatistics.UploadChangesFailed.ToString());
  lstStatistics.Items.Add("Upload Total: " + 
    syncOperationStatistics.UploadChangesTotal.ToString());
}
catch (Microsoft.Synchronization.SyncException se) {
  MessageBox.Show(se.Message, "Sync Files - Error");
}
finally {
  // Release resources once done
  if (sourceProvider != null) 
    sourceProvider.Dispose();
  if (destinationProvider != null) 
    destinationProvider.Dispose();
}

También puede informar del progreso de sincronización para una sesión de sincronización. Para implementar esto, siga estos pasos:

  1. Registrar un controlador de eventos para el evento ApplyingChange.
  2. Habilitar el modo de vista previa estableciendo la propiedad PreviewMode de FileSyncProvider en true.
  3. Tomar un contador de números enteros y aumenta cada vez que se desencadena el evento de cambio de ­ de aplicación.
  4. Iniciar el proceso de sincronización.
  5. Establezca la propiedad PreviewMode FileSyncProvider en false para deshabilitar PreviewMode.
  6. Vuelva a iniciar el proceso de sincronización.

El filtrado y se omite los archivos

Al sincronizar con el marco de sincronización, algunos archivos se pasan por alto automáticamente, incluidos, los archivos de metadatos, Desktop.ini y Thumbs.DB y archivos de sistema y los atributos de oculto. Puede aplicar filtros estáticos para controlar los archivos y carpetas que desee sincronizar. En concreto, estos filtros excluyen los archivos que no desea que forme parte del proceso de sincronización.

Utilizar filtros estáticos, cree una instancia de la clase FileSyncScopeFilter y pase los filtros de inclusión y exclusión como parámetros a su constructor. También puede utilizar el método FileNameExcludes.Add en su instancia FileSyncScopeFilter para filtrar uno o varios archivos de la sesión de sincronización. A continuación, se puede pasar en este caso FileSyncScopeFilter cuando se crea la instancia FileSyncProvider. Aquí se muestra un ejemplo:

FileSyncScopeFilter fileSyncScopeFilter = 
  new FileSyncScopeFilter();
fileSyncScopeFilter.FileNameExcludes.Add("filesync.id");
FileSyncProvider fileSyncProvider = 
  new FileSyncProvider(Guid.NewGuid(), 
  "D:\\MyFolder",fileSyncScopeFilter,FileSyncOptions.None);

De forma similar, puede excluir todos los archivos .lnk en el proceso de sincronización:

FileSyncScopeFilter fileSyncScopeFilter = 
  new FileSyncScopeFilter();
fileSyncScopeFilter.FileNameExcludes.Add("*.lnk");

Puede incluso utilizar FileSyncOptions para establecer las opciones de forma explícita para la sesión de sincronización:

FileSyncOptions fileSyncOptions = 
  FileSyncOptions.ExplicitDetectChanges | 
  FileSyncOptions.RecycleDeletedFiles |
  FileSyncOptions.RecyclePreviousFileOnUpdates |
  FileSyncOptions.RecycleConflictLoserFiles;

Omitir archivos de uno o más durante el proceso de sincronización, registre un controlador de eventos en el evento ApplyingChange y establezca la propiedad SkipChange en true:

FileSyncProvider fileSyncProvider;
fileSyncProvider.AppliedChange += 
  new EventHandler (OnAppliedChange);
destinationProvider.SkippedChange += 
  new EventHandler (OnSkippedChange);

Ahora puedo implementar el controlador de eventos OnAppliedChange para mostrar los cambios se producen:

public static void OnAppliedChange(
  object sender, AppliedChangeEventArgs args) {
  switch (args.ChangeType) {
    case ChangeType.Create:
      Console.WriteLine("Create " + args.NewFilePath);
      break;
    case ChangeType.Delete:
      Console.WriteLine("Delete" + args.OldFilePath);
      break;
    case ChangeType.Overwrite:
      Console.WriteLine("Overwrite" + args.OldFilePath);
      break;
    default:
      break;
  }
}

Tenga en cuenta que este ejemplo está simplificado por motivos de claridad. Se incluye una implementación más sólida en la descarga de código.

Para entender por qué se ha omitido un archivo determinado durante la sesión de sincronización, puede implementar el controlador de eventos OnSkippedChange:

public static void OnSkippedChange(
  object sender, SkippedChangeEventArgs args) {

  if (args.Exception != null)
    Console.WriteLine("Synchronization Error: " + 
      args.Exception.Message); 
}

Generar y ejecutar la aplicación. Haga clic en el botón de la carpeta de origen para seleccionar la carpeta de origen. Utilice la carpeta de destino para seleccionar la carpeta de destino. Verá la lista de los archivos en cada una de las carpetas antes de que se muestra la sincronización en los cuadros de lista respectivo (consulte de figura 1). El cuadro de lista de estadísticas de sincronización no muestra nada, como la sincronización todavía es que se inicie.

Ahora, haga clic en el botón Sincronizar para iniciar el proceso de sincronización. Una vez que se han sincronizado las carpetas de origen y destino, podrá ver el contenido de ambas carpetas después de la sincronización en los cuadros de lista respectivo. Las estadísticas de sincronización ahora muestra información acerca de las tareas que se han completado (consulte de figura 5).

image: Synchronization Finished

La figura 5 de sincronización de productos terminados

Conflictos de control

Sincronización Framework administra todas las complejidades que en la sincronización de la marca de hora que incluyen aplazados conflictos, errores, las interrupciones y bucles. Para controlar los conflictos de datos cuando una sesión de sincronización en curso, marco de sincronización sigue una de las estrategias siguientes:

  • Origen gana: En esta estrategia, los cambios realizados en el origen de datos se almacenan en el caso de un conflicto siempre gana.
  • Destino gana: En esta estrategia, los cambios realizados en los datos de destino se almacenan en el caso de un conflicto siempre gana.
  • Combinación: En esta estrategia, los cambios en el caso de un conflicto se combinan.
  • Registro del conflicto: Se trata de una estrategia en el que el conflicto se aplaza o se ha iniciado.

Descripción del flujo de sincronización

Una instancia de SyncOrchestrator controla el flujo de datos y de una sesión de sincronización durante la sesión. El flujo de sincronización siempre es unidireccional y dispone de un proveedor de código fuente asociado a la réplica de origen y un proveedor de destino que se adjunta a la réplica de destino. El primer paso es crear los origen y destino de los proveedores, les asigne identificadores de réplica único y conecte los dos proveedores para las réplicas de origen y destino:

FileSyncProvider sourceProvider = 
  new FileSyncProvider(sourceReplicaID, @"D:\Source");
FileSyncProvider destinationProvider = 
  new FileSyncProvider(destinationReplicaID, @"D:\Destination");

A continuación, cree una instancia de SyncOrchestrator y asociar los proveedores de dos a la misma. Una llamada al método Synchronize, en la instancia SyncOrchestrator crea un vínculo entre el origen y de los proveedores de destino:

SyncOrchestrator syncAgent = new SyncOrchestrator();
syncAgent.LocalProvider = sourceProvider;
syncAgent.RemoteProvider = destProvider;
syncAgent.Synchronize();

Desde ese punto, un número de llamadas se puede realizar mediante el marco de sincronización durante una sesión de sincronización de. Let’s guiarán a través de ellos.

Se llama a BeginSession en proveedores de origen y destino para indicar que el proveedor de sincronización que se va a unirse a una sesión de sincronización. Tenga en cuenta que el método BeginSession inicia la excepción InvalidOperationException si no se puede iniciar la sesión o el proveedor no se ha inicializado correctamente:

public abstract void BeginSession(
  SyncProviderPosition position, 
  SyncSessionContext syncSessionContext);

Sincronizar las llamadas de Framework GetSyncBatchParameters en la instancia del proveedor de destino. El proveedor de destino, devuelve su conocimiento (que es una representación compacta de las versiones o los cambios que está al corriente de una réplica determinada) y el tamaño del lote requerido. Este método acepta dos parámetros, es decir, batchSize y conocimientos de salida:

public abstract void GetSyncBatchParameters(
  out uint batchSize, 
  out SyncKnowledge knowledge);

Framework de sincronización invoca GetChangeBatch en el proveedor de código fuente. Este método acepta dos parámetros de entrada, el tamaño de lote y el conocimiento del destino:

public abstract ChangeBatch GetChangeBatch(
  uint batchSize, 
  SyncKnowledge destinationKnowledge, 
  out object changeDataRetriever);

El proveedor de sincronización de código fuente ahora envía el resumen de las versiones modificadas y conocimientos para el proveedor de destino en forma de objeto changeDataRetriever.

En el proveedor de destino para procesar los cambios, se llama al método de ProcessChangeBatch:

public abstract void ProcessChangeBatch(
  ConflictResolutionPolicy resolutionPolicy, 
  ChangeBatch sourceChanges, 
  object changeDataRetriever, 
  SyncCallbacks syncCallbacks, 
  SyncSessionStatistics sessionStatistics);

Se llama a SaveItemChange en el proveedor de sincronización de destino para cada uno de los cambios en el lote. Si se está implementando su propio proveedor personalizado, debe actualizar la réplica de destino con los cambios que se envían por la réplica de origen y, a continuación, actualizar los metadatos en el almacén de metadatos con el conocimiento de origen:

void SaveItemChange(SaveChangeAction saveChangeAction, 
  ItemChange  change, SaveChangeContext context);

Se llama a StoreKnowledgeForScope en el proveedor de sincronización de destino para guardar información en el almacén de metadatos:

public void StoreKnowledgeForScope(
  SyncKnowledge knowledge, 
  ForgottenKnowledge forgottenKnowledge)

Se llama a EndSession en proveedores de origen y destino para indicar que el proveedor de sincronización se va a abandonar la sesión de sincronización que se combinó con versiones anteriores:

public abstract void EndSession(
  SyncSessionContext syncSessionContext);

Proveedores de sincronización personalizados

Ahora ha visto cómo funcionan los proveedores de sincronización predeterminado. Como ya mencioné antes, también se pueden implementar proveedores de sincronización personalizados. Un proveedor de sincronización personalizados, amplía la funcionalidad de un proveedor de sincronización integrada. Puede que necesite un proveedor de sincronización personalizado si no hay ningún proveedor de almacenes de datos que se sincronizarán. También puede crear un proveedor de sincronización personalizado que implementa cambia unidades de un mayor control sobre el control de cambios y para reducir el número de conflictos.

Para diseñar su propio proveedor de sincronización, cree una clase que extiende la clase abstracta KnowledgeSyncProvider e implementa las interfaces de IChangeDataRetriever y INotifyingChangeApplierTarget. Tenga en cuenta que estas clases e interfaces son parte del espacio de nombres Microsoft.Synchronization.

Como ejemplo de un proveedor personalizado, supongamos que desea implementar un proveedor de sincronización para sincronizar datos entre bases de datos. Esto es simplemente una descripción general de un ejemplo sencillo, y podría ampliarse para adaptarse a los escenarios más complicados.

Primero, se crea tres bases de datos de SQL Server 2008 (denominé les ReplicaA, ReplicaB y ReplicaC) y crear una tabla en cada base de datos que se llama a los alumnos. El proveedor personalizado sincronizar registros entre estas tres tablas de Student. A continuación, cree una entidad que se llama a los alumnos para llevar a cabo operaciones de CRUD en la tabla Student.

Crear una clase denominada alumno con StudentID, FirstName, LastName como campos y los métodos auxiliares necesarios para ejecutar las operaciones de CRUD en la base de datos:

public class Student {
  public int StudentID { get; set; }
  public String FirstName { get; set; }
  public String LastName { get; set; }
  //Helper methods for CRUD operations
...
}

Crear una clase denominada CustomDBSyncProvider y se extienden desde las interfaces KnowledgeSyncProvider, IChangeDataRetriever, INotifyingChangeApplierTarget e IDisposable:

using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.Synchronization;
using Microsoft.Synchronization.MetadataStorage; 
public class CustomDBSyncProvider : KnowledgeSyncProvider, 
  IChangeDataRetriever, 
  INotifyingChangeApplierTarget,IDisposable {
...

Implementar los métodos necesarios en el proveedor de sincronización de la base de datos personalizada y crear la interfaz de usuario para mostrar el contenido de cada una de las tablas Student (consulte el código de descarga de este artículo para obtener más información).

Ahora, cree tres instancias del proveedor de sincronización personalizados y adjuntarlos a cada una de las tablas de base de datos para el alumno. Por último, sincronice el contenido de una réplica con otro con la Ayuda del proveedor de sincronización personalizado:

private void Synchronize(
  CustomDBSyncProvider sourceProvider, 
  CustomDBSyncProvider destinationProvider) {

  syncAgent.Direction = 
    SyncDirectionOrder.DownloadAndUpload;
  syncAgent.LocalProvider = sourceProvider;
  syncAgent.RemoteProvider = destinationProvider;
  syncStatistics = syncAgent.Synchronize();
}

Sincronizar copia

Como ha visto, el marco de sincronización proporciona una plataforma de sincronización sencillo pero completo, que proporciona la sincronización sin problemas entre los datos con y sin conexión.Se puede utilizar para sincronizar los datos independientemente de que el protocolo y el almacén de datos en uso.No se puede ser utilizado para copia de seguridad simple de archivos o ampliar fácilmente para redes basadas en colaboración.También puede crear proveedores de sincronización personalizados para admitir los orígenes de datos que no se incluyen de forma inmediata.

Joydip Kanjilal es un consultor de software independientes, así como MVP de Microsoft en ASP.NET desde 2007. También es un orador y autor de varios libros y artículos y blogs enaspadvice.com/blogs/joydip.

*Gracias al siguiente experto técnico para este artículo:*Liam Cavanagh