Dieser Artikel wurde maschinell übersetzt.

Synchronisierung

Anbieter für die Synchronisierung erstellen mit Sync Framework

Joydip Kanjilal

Downloaden des Codebeispiels

Microsoft Sync Framework ist eine umfassende Plattform zum Synchronisieren von offline- und online-Daten und ermöglicht die Zusammenarbeit und Offlinezugriff für Anwendungen, Dienste und Geräte gleichermaßen. Es ist und Datenbank protokollunabhängige und Technologien und Tools, mit denen Mobile Gerät, freigeben und die Möglichkeit, vernetzte Daten offline zu schalten, bevor die Synchronisierung zu einem späteren Zeitpunkt wieder.

Sync Framework kann verwendet werden, um Anwendungen zu erstellen, die Daten über einen beliebigen Datenspeicher mit einem beliebigen Protokoll über ein Netzwerk zu synchronisieren. Es ist eine umfassende Synchronisierungsplattform, die offline- und Datenzugriff für Anwendungen, Dienste und Geräte vereinfacht. Sync Framework ist eine erweiterbare Anbietermodell und Synchronisieren von Daten zwischen zwei Datenquellen mit verwaltetem und nicht verwaltetem Code verwendet werden kann.

Dieser Artikel hat einen Einblick in die Konzepte der Synchronisierung und Integration von Sync Framework in eigene Projekte. Insbesondere werde ich erörtern werden die Grundlagen der Datensynchronisierung, die Architekturkomponenten von Sync Framework und wie Sie Sync-Anbieter verwenden.

Für die Arbeit mit Sync Framework und in den Codebeispielen in diesem Artikel müssen Sie Visual Studio 2010 und die Sync Framework Runtime 2.0 oder höher installieren. Sie können die Common Language Runtime mit Microsoft Sync Framework 2.0 Redistributable Package downloaden aus dem Sync Framework Developer Center.

Sync Framework-Grundlagen

Sync Framework besteht aus vier Hauptkomponenten: eine Common Language Runtime Metadaten-Dienste, Anbieter für die Synchronisierung und Teilnehmer.

Die Sync Framework Runtime stellt die Infrastruktur für das Synchronisieren von Daten zwischen Datenquellen. Darüber hinaus gibt es ein SDK, das Entwickler benutzerdefinierte Anbieter implementieren.

Metadaten-Dienste bieten die Infrastruktur für das Sync-Metadaten zu speichern, die während der Synchronisierung verwendete Informationen enthält. Sync-Metadaten enthält Versionen, verankert und Ändern von Informationen zu erkennen. Sie werden auch synchronisiert Metadaten in den Entwurf und die Entwicklung von benutzerdefinierten Anbietern verwenden.

Synchronisierung Provider verwendet werden, um die Synchronisierung von Daten zwischen Replikaten oder Endpunkte. Ein Replikat ist eine Einheit der Synchronisierung und wird verwendet, um den eigentlichen Datenspeicher zu kennzeichnen. Als Beispiel wenn Sie Daten zwischen zwei Datenbanken synchronisiert sind wird dann alle Datenbanken als Replikat bezeichnet. Ein Replikat wird mit einen eindeutigen Bezeichner Replikat Schlüssel genannt identifiziert. Hier ein Endpunkt verweist auch auf einen Datenspeicher. Anbieter, die später in diesem Artikel ausführlicher erörtert.

Ein Teilnehmer verweist auf den Speicherort, in dem die Daten synchronisiert werden, abgerufen werden können. Dabei kann es sich um vollständige Teilnehmer, partielle Teilnehmer und einfache Teilnehmer handeln.

Vollständige Teilnehmer sind Geräte, die neue Datenspeicher zu erstellen, speichern Metadaten Synchronisierungsinformationen und Sync-Anwendungen auf die Geräte selbst ausführen. Vollständige Teilnehmer zählen Desktopcomputern, Laptops und Tabletts. Ein vollständiger Teilnehmer kann Daten mit einem anderen Teilnehmer synchronisieren.

Partielle Teilnehmer sind Geräte, die neue Datenspeicher und Speicherinformationen Sync-Metadaten erstellen können, jedoch können Anwendungen selbst ausführen. Ein USB-Speichergerät oder Smartphone konnte einen partiellen Teilnehmer sein. Beachten Sie, dass ein partieller Teilnehmer Daten mit einem vollständigen Teilnehmer, aber nicht mit einem anderen partiellen Teilnehmer synchronisieren kann.

Einfache Teilnehmer sind Geräte, die nicht von neue Daten speichern oder Ausführen von Anwendungen, aber Sie können nur die erforderlichen Informationen bereitstellen. Beispiele für einfache Teilnehmer sind RSS-Feeds und Amazon und Google-Webdienste.

Synchronisierung-Anbieter

Ein Anbieter für die Synchronisierung ist eine Komponente, die einen Synchronisierungsvorgang teilnehmen kann und ein Replikat synchronisiert Daten mit anderen Replikaten ermöglicht. Sie sollten eine Synchronisierung Anbieter pro Replikat verfügen.

Synchronisieren von Daten wird eine Synchronisierungssitzung gestartet. Die Anwendung verbindet die Quell- und die Synchronisierung Anbieter in der Sitzung um die Datensynchronisierung zwischen den Replikaten zu erleichtern.

Wenn eine Synchronisierungssitzung ausgeführt wird, bietet der Zielanbieter Informationen über seine Datenspeicher an den Anbieter der Quelle. Der Quell-Anbieter bestimmt, welche Änderungen an das Quellreplikat nicht bekannt sind, um das Zielreplikat und legt dann die Liste der Änderungen an den Zielanbieter. Der Zielanbieter dann erkennt Konflikte zwischen eigenen Elemente und diejenigen, die in der Liste vorhanden und wendet dann die Änderungen auf den Datenspeicher. Das Modul Sync Framework erleichtert die diesem Synchronisierungsprozess.

Sync Framework unterstützt drei Standardanbieter für Datenbank, Dateisystem und Synchronisierung der Feeds:

  • Synchronisierung Anbieter für Datenquellen mit ADO.NET aktiviert
  • Synchronisierung Anbieter für RSS und Atom-feeds
  • Synchronisierung Anbieter für Dateien und Ordner

Sie können auch Sync Framework So erstellen Sie einen eigenen benutzerdefinierten Sync-Anbieter zum Austausch von Informationen zwischen Geräten und Anwendungen erweitern.

Der Datenbankprovider Synchronisierung (zuvor Sync Services für ADO.NET in Sync Framework 1.0 genannt) unterstützt die Synchronisierung von Datenquellen mit ADO.NET aktiviert. Getrennte Datenanwendungen können, die Synchronisierung zwischen ADO.NET aktiviert Datenquellen, wie SQL Server vereinfachen erstellt werden. Roaming und Freigabe von Daten offline geschaltet werden können. Der Synchronisierungsvorgang mit anderen Datenquellen kann jeder Datenbank, von der Datenbankanbieter verwendet teilnehmen, die von Sync Framework einschließlich Dateisysteme, Webdienste oder sogar benutzerdefinierte Datenspeichern unterstützt werden.

Der Web-Synchronisierung-Anbieter (früher Sync-Dienste für FeedSync) unterstützt die Synchronisierung von RSS und ATOM-Feeds. FeedSync, bevor Sie diese Technologie wurde als Simple Sharing Extensions bezeichnet und wurde ursprünglich von Ray Ozzie entwickelt. Beachten Sie, dass der Web-Synchronisierung-Anbieter nicht die vorhandenen Technologien wie RSS ersetzen oder Atom-feeds. Stattdessen bietet es Ihnen eine einfache Möglichkeit, die Funktionen für die Synchronisierung vorhandene RSS- oder Atom-Feeds hinzufügen, damit Sie von anderen Anwendungen oder Diensten, die unabhängig von der Plattform oder das Gerät verwendet verwendet werden können.

Der Datei-Synchronisierung-Anbieter (früher Sync-Dienste für File Systems) unterstützt die Synchronisierung von Dateien und Ordnern in Ihrem System. Hiermit können Sie Dateien und Ordner in demselben System oder mehreren Systemen im Netzwerk synchronisieren. In Systemen mit NTFS, FAT oder SMB-Dateisysteme können Sie Dateien und Ordner synchronisieren. Der Anbieter verwendet das Sync Framework-Metadaten-Modell zum Aktivieren von Peer-to-Peer-Synchronisierung von Daten durch die Unterstützung von beliebigen Topologien (Client/Server, full-Mesh und Peer-to-Peer) einschließlich der Unterstützung für Wechselmedien. Der Datei-Synchronisierung-Anbieter ermöglicht auch die inkrementelle Synchronisierung, Konflikt, und ändern Sie die Erkennung, die Synchronisierung in der Vorschau, und ohne Vorschau Betriebsmodi, und Filtern und Dateien in den Synchronisierungsprozess übersprungen.

Arbeiten mit integrierter Sync-Anbieter

In diesem Abschnitt werde ich zeigen, wie das Arbeiten mit den integrierten Synchronisierung Anbietern eine einfache Anwendung zu implementieren, die den Inhalt des zwei Ordner in Ihrem System synchronisiert.

FileSyncProvider-Klasse kann verwendet werden, um einen Datei-Synchronisierung-Anbieter zu erstellen. Diese Klasse erweitert die UnManagedSyncProvider-Klasse und die IDisposable-Schnittstelle implementiert. FileSyncScopeFilter-Klasse zum einschließen oder Ausschließen von Dateien und Ordnern, die in den Synchronisierungsprozess teilnehmen sollen.

FileSyncProvider erkennt die Änderungen im Replikat synchronisiert Metadaten verwenden. Sync-Metadaten enthält Informationen über alle Dateien und Ordner, die Teil des Synchronisierungsprozesses sind. Es gibt eigentlich zwei Arten von Metadaten synchronisieren: Replikat Metadaten und Elementmetadaten. Der Datei-Synchronisierung-Provider speichert die Metadaten für alle Dateien und Ordner, die Teil in den Synchronisierungsprozess. Zu einem späteren Zeitpunkt verwendet, die Dateigröße, Attributen und dem letzten Zugriff auf die Zeiten für diese Dateien und Ordner, um Änderungen zu erkennen.

Öffnen Sie Visual Studio 2010, und erstellen Sie ein neues Projekt mit Windows Presentation Foundation (WPF). Speichern Sie das Projekt mit dem Namen SyncFiles. Öffnen Sie die Datei MainWindow.xaml, und erstellen Sie ein WPF-Formular ähnelt, was in Abbildung 1 angezeigt werden.

die Sync-App-Beispiel

Abbildung 1 die Sync-App-Beispiel

Wie Sie sehen können, müssen Sie die Steuerelemente, um die Quell- und Ziel-Ordner auswählen. Sie können auch Steuerelemente zum Anzeigen der Synchronisierungsstatistiken und den Inhalt der Quell- und der Zielordner.

Mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer, klicken Sie auf Verweis hinzufügen, und fügen Sie die Microsoft.Synchronization Assemblys.

Fügen Sie nun eine neue GetReplicaID-Methode in MainWindow.xaml.cs Datei zurückgeben eine GUID dargestellten Code in Abbildung 2 . Synchronize-Methode beim Aufruf der Instanz von SyncOrchestrator, erstellt eine Datei mit Metadaten filesync.metadata in jedem Ordner oder mithilfe der eindeutigen GUID Replikate bezeichnet. GetReplicaID-Methode behält diese GUID in eine Datei so, dass der nächste Aufruf an diese Methode eine neue GUID für den jeweiligen Ordner generiert wird nicht. Die GetReplicaID-Methode überprüft zunächst, ob die Datei mit eine Replikat-ID vorhanden ist. Wenn die Datei nicht gefunden wird, wird eine neue Replikat-ID erstellt und in der Datei gespeichert. Wenn die Datei vorhanden ist (da die Replikat-ID für den betreffenden Ordner zuvor erstellt wurde), gibt die Replikat-ID aus der Datei zurück.

Abbildung 2 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());
      }
    }
  }
}

Nächstes fügen eine Methode namens „ GetFilesAndDirectories, um eine Liste der Dateien und Ordner unter den Pfad des Replikats zurückzugeben (siehe Abbildung 3 ). Der Name des Ordners sollte darauf als Parameter übergeben werden.

Abbildung 3 erste Replikat Dateien und Ordner

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;
}

Diese Methode wird verwendet, die Liste der Dateien und Ordner in den Ordnern, Quelle und Ziel vor und nach der Synchronisierungsprozess anzeigen. Rufen Sie die Methoden PopulateSourceFileList und PopulateDestinationFileList GetFilesAndDirectories die Listenfelder aufzufüllen, die die Dateien und Verzeichnisse in den Quell- und Ziel-Ordnern (Siehe Codedownload ausführliche) Anzeige.

Die BtnSource_Click und BtnDestination_Click-Ereignishandler werden verwendet, um die Quell- und Zielordner auszuwählen. Beide Methoden nutzen die FolderBrowser-Klasse zeigt ein Dialogfeld an, in dem der Benutzer die Quelle oder das Ziel der Ordner auswählen können. Der vollständigen Quellcode der Klasse FolderBrowser steht für den Download mit der Codedownload für diesen Artikel zur Verfügung.

Jetzt muss ich den Click-Ereignishandler des Button-Steuerelements zu schreiben, die durch die Schaltfläche deaktivieren, bevor die Synchronisierung beginnt beginnt. Anschließend wird die Synchronize-Methode mit den Pfaden für Quelle und Ziel als Parameter aufgerufen. Schließlich ich den Synchronisierungsvorgang starten, Abfangen von Fehlern und die Schaltfläche aktivieren, wenn die Synchronisierung abgeschlossen ist:

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

Synchronize-Methode akzeptiert den Pfad für Quelle und Ziel und Inhalt von zwei Replikaten synchronisiert. In der Synchronize-Methode werden ich eine Instanz der Klasse SyncOperationStatistics statistische Informationen zu den Synchronisierungsprozess abzurufen:

SyncOperationStatistics syncOperationStatistics;

Ich auch Erstellen der Quelle und dem Ziel Sync-Anbieter, eine benannte SynchronizationAgent SyncOrchestrator-Instanz erstellen, weisen Sie die GUIDs der Quell- und Ziel-Replikate und zwei Anbieter zuordnen. Die SyncOrchestrator ist verantwortlich für die Koordination der Synchronisierungssitzung:

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;

Schließlich ich den Synchronisierungsvorgang starten, wird Fehler abzufangen und in Abbildung 4 geeignete Ressourcen freizugeben. Der Codedownload für diesen Artikel umfasst das vollständige Quellprojekt mit Fehlerbehandlung und andere Implementierungsdetails.

Abbildung 4 Synchronisieren von Replikaten

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();
}

Sie können auch den Fortschritt der Synchronisierung für eine Synchronisierungssitzung melden. Um dies zu implementieren, gehen Sie wie folgt vor:

  1. Registrieren Sie einen Ereignishandler für das Ereignis ApplyingChange.
  2. PreviewMode-Eigenschaft des FileSyncProvider auf True festlegen, um Vorschau-Modus zu aktivieren.
  3. Nehmen Sie ein ganzzahliger Zähler in Anspruch, und erhöhen Sie diese jedes Mal, wenn das Anwenden ­ Change-Ereignis ausgelöst wird.
  4. Starten Sie den Synchronisationsvorgang ab.
  5. Setzen Sie die PreviewMode-Eigenschaft des FileSyncProvider, auf False PreviewMode deaktivieren.
  6. Starten Sie die Synchronisierung erneut.

Filtern und Dateien überspringen

Bei der Synchronisierung Sync Framework verwenden, werden einige Dateien automatisch übersprungen, einschließlich "Desktop.ini" und Thumbs.db, Dateien mit ausgeblendeten Attributen und System und Metadatendateien. Sie können statische Filter steuern, die Dateien und Ordner synchronisiert werden sollen, anwenden. Diese Filter ausschließen, insbesondere die Dateien, die nicht Teil des Synchronisierungsprozesses sein sollen.

Statische Filter verwenden möchten, erstellen Sie eine Instanz der Klasse FileSyncScopeFilter und übergeben Sie die Filter ein- und Ausschlussregeln als Parameter an seinen Konstruktor. Sie können auch FileNameExcludes.Add-Methode auf die Instanz der FileSyncScopeFilter verwenden, eine oder mehrere Dateien aus dem Synchronisierungssitzung herausfiltern. Sie können dann in dieser Instanz FileSyncScopeFilter beim Erstellen der Instanz FileSyncProvider übergeben. Hier ist ein Beispiel:

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

Auf ähnliche Weise können Sie alle LNK-Dateien aus den Synchronisierungsprozess ausschließen:

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

FileSyncOptions können auch Optionen für die Synchronisierungssitzung explizit festlegen:

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

Eine oder mehrere Dateien während der Synchronisierung überspringen möchten, registrieren Sie einen Ereignishandler für das Ereignis ApplyingChange und festlegen Sie SkipChange-Eigenschaft auf True:

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

Jetzt kann ich implementieren den Ereignishandler OnAppliedChange, um anzuzeigen, welche Änderungen vorgenommen:

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;
  }
}

Beachten Sie, dass in diesem Beispiel wird aus Gründen der Übersichtlichkeit vereinfacht wird. Eine stabilere Implementierung ist im Codedownload enthalten.

Um zu verstehen, warum eine bestimmte Datei während der Synchronisierungssitzung übersprungen worden ist, können Sie den Ereignishandler OnSkippedChange implementieren:

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

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

Erstellen und Ausführen der Anwendung. Klicken Sie auf die Schaltfläche Quellordner den Quellordner auswählen. Verwenden Sie den Zielordner, um den Zielordner auszuwählen. Die Liste der Dateien in jedem Ordner wird angezeigt, bevor die Synchronisierung in den jeweiligen Listenfeldern angezeigt wird (siehe Abbildung 1 ). Während der Synchronisierung wird noch gestartet werden, wird nicht im Listenfeld Synchronisations-Statistik nichts angezeigt.

Klicken Sie nun auf die Schaltfläche synchronisieren, um die Synchronisierung zu starten. Sobald die Quell- und Ziel-Ordner synchronisiert wurden, sehen Sie den Inhalt beider Ordner nach der Synchronisierung in den jeweiligen Listenfeldern. Die Synchronisierung Statistik im Listenfeld zeigt jetzt Informationen über die Aufgaben, die durchgeführt (siehe Abbildung 5 ).

Synchronisierung beendet

Abbildung 5 Synchronisierung beendet

Behandeln von Konflikten

Sync Framework verwaltet alle die Komplexitäten Timestamp-basierte Synchronisierung beteiligt, die verzögerte Konflikte, Fehler, Unterbrechungen und Schleifen. Sync Framework folgt um Datenkonflikte behandeln, wenn eine Synchronisierungssitzung ausgeführt wird, eine der folgenden Strategien:

  • Quelle gewinnt: Bei dieser Strategie, die in den Quelldaten vorgenommenen Änderungen speichern im Falle eines Konflikts haben immer Vorrang.
  • Ziel gewinnt: Bei dieser Strategie die Änderungen, die in die Zieldaten vorgenommen wurden, die im Falle eines Konflikts Speichern immer zu gewinnen.
  • Zusammenführen: Bei dieser Strategie werden die Änderungen im Falle eines Konflikts zusammen zusammengeführt.
  • Protokollkonflikt: Dies ist eine Strategie, in der der Konflikt zurückgestellt oder angemeldet ist.

Informationen zum Verständnis der Synchronisations-Datenfluss

Eine Instanz der SyncOrchestrator steuert eine Synchronisierungssitzung und den Fluss der Daten während der Sitzung. Der Nachrichtenfluss von Synchronisation ist immer eine Richtung, und Sie einen Quell-Anbieter, das Quellreplikat zugeordnet und einen Zielanbieter, der das Zielreplikat zugeordnet haben. Der erste Schritt besteht darin, Quell- und Ziel-Anbieter zu erstellen, eindeutige Replikat-IDs zuweisen, und fügen Sie zwei Anbieter an die Quell- und Ziel-Replikate:

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

Anschließend erstellen Sie eine Instanz des SyncOrchestrator und ordnen Sie zwei Anbieter . Ein Aufruf der Synchronize-Methode auf der Instanz SyncOrchestrator erstellt eine Verknüpfung zwischen der Quelle und Ziel-Anbieter:

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

Ab diesem Zeitpunkt kann eine Anzahl von Anrufen von Sync Framework vorgenommen werden, während eine Synchronisierungssitzung ausgeführt wird. Let’s durchlaufen werden.

BeginSession wird für Quelle und Ziel-Anbietern an der Synchronisierung Anbieter ist zu einer Freigabesitzung Synchronisierung aufgerufen. Beachten Sie, dass die BeginSession-Methode InvalidOperationException, auslöst Wenn die Sitzung kann nicht gestartet werden, oder der Anbieter wurde nicht ordnungsgemäß initialisiert:

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

Sync Framework ruft GetSyncBatchParameters für die Instanz des Ziel-Anbieters. Der Zielanbieter gibt seine Kenntnisse (eine kompakte Darstellung von Versionen oder Änderungen, denen ein bestimmtes Replikat bekannt ist) und die angeforderte Batchgröße zurück. Diese Methode akzeptiert zwei out-Parameter, nämlich BatchSize und Kenntnisse:

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

Sync Framework ruft GetChangeBatch auf dem Quell-Anbieter. Diese Methode akzeptiert zwei Eingabeparameter, die Batchgröße und die Kenntnisse des Ziels:

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

Der Quelle Synchronisierung Anbieter sendet die Zusammenfassung der geänderten Versionen und Kenntnisse nun an den Zielanbieter in Form von ChangeDataRetriever-Objekt.

ProcessChangeBatch-Methode wird aufgerufen, auf dem Zielprovider, die Änderungen zu verarbeiten:

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

SaveItemChange wird für die Synchronisierung Zielanbieter für jede der Änderungen in der Stapelverarbeitung aufgerufen. Wenn Sie einen eigenen benutzerdefinierten Anbieter implementiert werden, sollten Sie aktualisieren das Zielreplikat mit den Änderungen, die vom Quellreplikat gesendet und anschließend die Metadaten im Metadatenspeicher mit der Quelle wissen:

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

StoreKnowledgeForScope wird für die Synchronisierung Zielanbieter Kenntnisse in der Metadatenspeicher speichern aufgerufen:

public void StoreKnowledgeForScope(
  SyncKnowledge knowledge, 
  ForgottenKnowledge forgottenKnowledge)

EndSession wird für die Quell- und Ziel-Anbieter gibt an, dass der Provider die Synchronisierung der Synchronisierungssitzung lassen es früher verknüpft aufgerufen:

public abstract void EndSession(
  SyncSessionContext syncSessionContext);

Benutzerdefinierte Anbieter für Synchronisierung

Nachdem Sie gesehen haben, wie den Standardanbieter für die Synchronisierung zu arbeiten. Wie ich bereits erwähnt habe, können Sie auch benutzerdefinierte Synchronisierung Anbieter implementieren. Ein benutzerdefinierter Synchronisierung Anbieter erweitert die Funktionalität eines Anbieters integrierten Synchronisierung. Möglicherweise müssen einen benutzerdefinierten Synchronisierung-Anbieter, wenn es ist kein Anbieter für den Datenspeichern synchronisiert werden. Sie können auch einen benutzerdefinierten Synchronisierung Anbieter erstellen, implementiert, Einheiten für eine bessere Kontrolle über das Nachverfolgen von Änderungen und zur Reduzierung der Anzahl von Konflikten zu ändern.

Erstellen Sie eine Klasse, die abstrakte Klasse KnowledgeSyncProvider erweitert und implementiert die Schnittstellen IChangeDataRetriever und INotifyingChangeApplierTarget, um Ihren eigenen Anbieter der Synchronisierung zu entwerfen. Beachten Sie, dass diese Klassen und Schnittstellen der Microsoft.Synchronization-Namespace gehören.

Als Beispiel eines benutzerdefinierten Anbieters sagen Sie einen Anbieter für die Synchronisierung für das Synchronisieren von Daten zwischen Datenbanken implementieren wollten. Dies ist nur eine Übersicht über ein einfaches Beispiel, und kann erweitert werden, um erheblich komplizierteren Szenarios zu berücksichtigen.

Erstellen Sie drei Datenbanken in SQL Server 2008 (I bezeichnet diese ReplicaA, ReplicaB und ReplicaC), und erstellen Sie eine Tabelle in jeder Datenbank Student aufgerufen. Der benutzerdefinierte Anbieter werden Datensätze zwischen diesen drei Student Tabellen synchronisiert werden. Erstellen Sie anschließend eine Entität, die Kursteilnehmer zur Durchführung der CRUD-Operationen auf der Kursteilnehmer-Tabelle aufgerufen.

Erstellen Sie eine Klasse namens „ Student mit StudentID, FirstName, LastName, wie Felder und die notwendigen Hilfsmethoden CRUD-Operationen in der Datenbank auszuführen:

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

Erstellen Sie eine Klasse namens „ CustomDBSyncProvider und von den KnowledgeSyncProvider, IChangeDataRetriever, INotifyingChangeApplierTarget und IDisposable-Schnittstellen zu erweitern:

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

Implementieren Sie die erforderlichen Methoden in Ihrem benutzerdefinierten Datenbankanbieter Synchronisierung, und erstellen Sie die Benutzeroberfläche zum Anzeigen von Inhalten der einzelnen Tabellen Student (Siehe Codedownload für diesen Artikel Weitere Informationen).

Nun erstellen Sie drei Instanzen der Synchronisierung von benutzerdefinierten Anbieter, und fügen Sie zu jeder Student-Datenbanktabellen. Synchronisieren Sie schließlich den Inhalt eines Replikats mit einem anderen mit Hilfe der Synchronisierung der benutzerdefinierte Anbieter:

private void Synchronize(
  CustomDBSyncProvider sourceProvider, 
  CustomDBSyncProvider destinationProvider) {

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

Synchronisiert nach oben

Wie Sie gesehen haben, bietet Sync Framework eine einfache, aber umfassende Synchronisierungsplattform, die eine nahtlose Synchronisierung zwischen offline- und online-Daten bereitstellt. Es kann verwendet werden, Synchronisieren von Daten, die unabhängig von dem Protokoll und der Datenspeicher verwendet wird. Es könnte für einfache Dateisicherung verwendet oder einfach für Zusammenarbeit-basierten Netzwerken erweitert. Sie können auch benutzerdefinierte Synchronisierung Anbieter Datenquellen zu unterstützen, die außerhalb des Feldes gespeichert sind nicht erstellen.

Joydip Kanjilal ist ein unabhängiger Softwareberater sowie ein Microsoft MVP in ASP.NET seit 2007. Er ist außerdem ein Sprecher und Verfasser mehrerer Bücher und Artikel und Blogs unter aspadvice.com/blogs/joydip

*Dank an den folgenden technischen Experten für die Überprüfung der in diesem Artikel:*Liam Cavanagh