Wiederherstellen eines veralteten Replikats
Vor dem Übernehmen von Änderungen vergleicht Microsoft Sync Framework das vergessene Wissen des Quellreplikats mit dem aktuellen Wissen des Zielreplikats. Wenn das vergessene Wissen nicht im Wissen des Zielreplikats enthalten ist, identifiziert Sync Framework das Zielreplikat als veraltet und startet eine Wiederherstellungssynchronisierung.
Zum Ausführen einer Wiederherstellungssynchronisierung führt Sync Framework folgende Schritte durch:
Wenn die Anwendung für den Empfang von Benachrichtigungen registriert wurde, benachrichtigt Sync Framework die Anwendung darüber, dass eine Wiederherstellungssynchronisierung erforderlich ist. Die Anwendung kann alle Elemente im Quellreplikat vollständig auflisten, eine partielle Synchronisierung ausführen oder die Synchronisierung abbrechen. Die Standardaktion ist die Ausführung einer vollständigen Enumeration.
Wenn die Anwendung eine vollständige Enumeration angibt, verwirft Sync Framework den aktuellen Änderungsbatch, listet alle Elemente im Quellreplikat vollständig auf und übernimmt diese für das Zielreplikat.
Wenn die Anwendung eine partielle Synchronisierung angibt, fährt Sync Framework wie in einer typischen Synchronisierung fort, Quelländerungen aufzulisten und diese für das Zielreplikat zu übernehmen. Allerdings werden nun Änderungen des erlangten Wissens als einzelne Elementausnahmen übernommen.
Wiederherstellungssynchronisierung
In einer Sync Framework-Synchronisierungscommunity enthält jedes Replikat Metadaten über die Elemente im Replikat. Durch die Metadaten werden Informationen über Erstellungs-, Änderungs- und Löschvorgänge der im Replikat gespeicherten Elemente nachverfolgt. Um zu verhindern, dass der gesamte Speicherplatz belegt wird, muss ein Replikat die Metadaten für gelöschte Elemente regelmäßig bereinigen. Wenn ein Replikat Metadaten für ein gelöschtes Element entfernt hat, kann das Replikat den Löschvorgang nicht mehr auflisten und während der Synchronisierung als Änderung senden. So lange alle Replikate in einer Synchronisierungscommunity die Löschvorgänge vor dem Bereinigen der Metadaten synchronisieren, werden alle Löschvorgänge ordnungsgemäß weitergegeben, und es treten keine Probleme auf.
Ein Replikat kann jedoch veralten, wenn dessen Daten nicht synchronisiert werden, bevor ein anderes Replikat eine Metadatenbereinigung ausgeführt hat. In diesem Fall kann das Replikat, das die Bereinigung ausgeführt hat, die bereinigten Änderungen nicht mehr auflisten und an das veraltete Replikat senden. Wenn zwischen einem Quellreplikat, das eine Metadatenbereinigung ausgeführt hat, und einem veralteten Zielreplikat ein Synchronisierungsversuch unternommen wird, erfordert Sync Framework zur Behebung dieses Problems die Wiederherstellung des Zielreplikats mithilfe der Wiederherstellungssynchronisierung. Eine Wiederherstellungssynchronisierung ist notwendig, um zu verhindern, dass das veraltete Replikat ein bereits aus der Synchronisierungscommunity gelöschtes Element erneut einführt.
Sync Framework verwendet das vergessene Wissen des Quellreplikats, um ein Zielreplikat als veraltet zu erkennen. Wenn ein Replikat Metadaten für ein gelöschtes Element entfernt, wird die Version des Löschvorgangs im vergessenen Wissen des Replikats aufgezeichnet. Das vergessene Wissen kann daher verwendet werden, um Elemente zu identifizieren, die dem Replikat bekannt waren und gelöscht wurden und deren Metadaten entfernt wurden. Beachten Sie, dass das vergessene Wissen die Menge der Elemente, deren Metadaten entfernt wurden, überschätzt. Daher kann das vergessene Wissen auch Elemente enthalten, die noch über aktive Einträge in den Metadaten verfügen.
Antworten auf Benachrichtigungen über eine Wiederherstellungssynchronisierung
Eine Anwendung kann für den Empfang von Benachrichtigungen über die Notwendigkeit einer Wiederherstellungssynchronisierung registriert werden. Nach dieser Benachrichtigung kann die Anwendung eine vollständige Enumeration starten, mit der aktuellen Sitzung fortfahren oder die Sitzung beenden. In der Standardeinstellung startet Sync Framework eine vollständige Enumeration, wenn die Anwendung nicht für den Empfang dieser Benachrichtigung registriert ist.
Antworten auf Benachrichtigungen über eine Wiederherstellungssynchronisierung mithilfe von verwaltetem Code
Um eine Benachrichtigung über die Notwendigkeit einer Wiederherstellungssynchronisierung zu erhalten, implementiert die Anwendung einen Ereignishandler und registriert diesen für den Empfang des FullEnumerationNeeded-Ereignisses. Wenn dieses Ereignis ausgelöst wird, antwortet der Ereignishandler, indem er die Action-Eigenschaft des FullEnumerationNeededEventArgs-Objekts auf eine der folgenden Aktionen festlegt:
Bei Full verwirft Sync Framework den aktuellen Änderungsbatch und startet eine vollständige Enumeration durch Aufrufen folgender Methoden:
Die GetFullEnumerationChangeBatch-Methode zur Enumeration aller Elementänderungen vom Quellreplikat.
Die ProcessFullEnumerationChangeBatch-Methode zum Übernehmen der Änderungen für das Zielreplikat.
Bei Partial übernimmt Sync Framework den aktuellen Änderungsbatch und fährt mit der Sitzung wie bei einer gewöhnlichen Synchronisierung fort. Allerdings werden nun Änderungen des erlangten Wissens als einzelne Elementausnahmen übernommen.
Bei Abort beendet Sync Framework die aktuelle Sitzung.
Antworten auf Benachrichtigungen einer Wiederherstellungssynchronisierung mithilfe von nicht verwaltetem Code
Um eine Benachrichtigung über die Notwendigkeit einer Wiederherstellungssynchronisierung zu erhalten, implementiert die Anwendung die ISyncCallback-Schnittstelle und registriert diese mithilfe von ISyncSession::RegisterCallback. Sync Framework ruft vor dem Beginn einer Wiederherstellungssynchronisierung ISyncCallback::OnFullEnumerationNeeded auf. Diese Methode gibt eine der folgenden Aktionen zurück:
Mit SFEA_FULL_ENUMERATION verwirft Sync Framework den aktuellen Änderungsbatch und startet eine vollständige Enumeration durch Aufrufen folgender Methoden:
Die IKnowledgeSyncProvider::GetFullEnumerationChangeBatch-Methode zur Enumeration aller Elementänderungen des Quellreplikats.
Die IKnowledgeSyncProvider::ProcessFullEnumerationChangeBatch-Methode zum Übernehmen der Änderungen für das Zielreplikat.
Bei SFEA_PARTIAL_SYNC übernimmt Sync Framework den aktuellen Änderungsbatch und fährt mit der Sitzung wie bei einer gewöhnlichen Synchronisierung fort. Allerdings werden nun Änderungen des erlangten Wissens als einzelne Elementausnahmen übernommen.
Bei SFEA_ABORT beendet Sync Framework die aktuelle Sitzung.
Vollständige Enumeration aller Änderungen am Quellreplikat
Bei einer vollständigen Enumeration erfordert Sync Framework die Enumeration aller Änderungen durch den Quellenanbieter. Sync Framework vergleicht daraufhin die Änderungen im Quellenanbieter mit den Elementen im Zielreplikat. Für alle Elemente im Zielreplikat, die nicht über eine entsprechende Änderung vom Quellenanbieter verfügen, wird angenommen, dass sie im Quellreplikat gelöscht wurden. Diese Elemente werden auch im Zielreplikat gelöscht. Stellen Sie daher sicher, dass der Quellenanbieter alle Elemente im Quellreplikat ordnungsgemäß auflistet, da andernfalls Elemente im Zielreplikat fälschlicherweise gelöscht werden.
Vollständige Enumeration von Änderungen mithilfe von verwaltetem Code
Zur vollständigen Enumeration von Änderungen vom Quellenanbieter ruft Sync Framework die GetFullEnumerationChangeBatch-Methode anstelle von GetChangeBatch auf. Beim Aufruf dieser Methode gibt der Quellenanbieter ein FullEnumerationChangeBatch-Objekt zurück. Führen Sie folgende Schritte durch, um diesen Änderungsbatch zu erstellen:
Öffnen Sie mithilfe von BeginOrderedGroup eine geordnete Gruppe. Die Element-ID, die am Beginn der Gruppe verwendet wird, muss die erste aufgelistete ID und kleiner oder gleich der in GetFullEnumerationChangeBatch festgelegten unteren Enumerationsgrenze sein.
Optional können dem Batch nach Element-ID sortierte Änderungen hinzugefügt werden, deren Element-IDs kleiner als die untere Enumerationsgrenze sind und die nicht im Zielwissen enthalten sind.
Fügen Sie dem Batch nach Element-ID sortierte Änderungen hinzu, deren Element-IDs größer oder gleich der unteren Enumerationsgrenze sind.
Schließen Sie die geordnete Gruppe mithilfe von EndOrderedGroup. Geben Sie die obere Enumerationsgrenze als ID der letzten der Gruppe hinzugefügten Änderung an. Wenn dies der letzte Batch ist, geben Sie die obere Enumerationsgrenze als Infinity an.
Wenn dies der letzte Batch ist, rufen Sie SetLastBatch; auf. Andernfalls ruft Sync Framework die GetFullEnumerationChangeBatch-Methode erneut auf.
Vollständige Enumeration von Änderungen mithilfe von nicht verwaltetem Code
Zur vollständigen Enumeration von Änderungen vom Quellenanbieter ruft Sync Framework die IKnowledgeSyncProvider::GetFullEnumerationChangeBatch-Methode anstelle von IKnowledgeSyncProvider::GetChangeBatch auf. Beim Aufruf dieser Methode gibt der Quellenanbieter ein ISyncFullEnumerationChangeBatch-Objekt zurück. Führen Sie folgende Schritte durch, um diesen Änderungsbatch zu erstellen:
Erstellen Sie das Änderungsbatchobjekt mithilfe von IProviderSyncServices::CreateFullEnumerationChangeBatch.
Öffnen Sie mithilfe von ISyncChangeBatchBase::BeginOrderedGroup eine geordnete Gruppe. Die Element-ID, die am Beginn der Gruppe verwendet wird, muss die erste aufgelistete ID und kleiner oder gleich der in GetFullEnumerationChangeBatch festgelegten unteren Enumerationsgrenze sein.
Optional können dem Batch nach Element-ID sortierte Änderungen hinzugefügt werden, deren Element-IDs kleiner als die untere Enumerationsgrenze sind und die nicht im Zielwissen enthalten sind.
Fügen Sie dem Batch nach Element-ID sortierte Änderungen hinzu, deren Element-IDs größer oder gleich der unteren Enumerationsgrenze sind.
Schließen Sie die geordnete Gruppe mithilfe von ISyncChangeBatchBase::EndOrderedGroup. Geben Sie die obere Enumerationsgrenze als ID der letzten der Gruppe hinzugefügten Änderung an. Wenn dies der letzte Batch ist, geben Sie die obere Enumerationsgrenze als NULL an.
Wenn dies der letzte Batch ist, rufen Sie ISyncChangeBatchBase::SetLastBatch auf. Andernfalls ruft Sync Framework die GetFullEnumerationChangeBatch-Methode erneut auf.
Verarbeiten von Änderungen während einer Wiederherstellungssynchronisierung
Um festzustellen, welche Elemente im Zielreplikat gelöscht werden müssen, erfordert Sync Framework, dass der Zielanbieter alle Elemente im Zielreplikat nach Element-ID sortiert auflistet, deren Element-IDs zwischen der unteren und der oberen Enumerationsgrenze der einzelnen Änderungsbatches liegen. Ein Element im Zielreplikat, das nicht über eine entsprechende, vom Quellenanbieter aufgelistete Änderung verfügt, wird gelöscht.
Der Zielanbieter übergibt diese Liste von Zielelementen an den Änderungsanwender. Der Änderungsanwender legt die Behandlung der einzelnen Änderungen fest und ruft die entsprechende Methode des Zielanbieters auf, um die Änderung für das Zielreplikat zu übernehmen.
Verarbeiten von Änderungen mithilfe von verwaltetem Code
Um während einer Wiederherstellungssynchronisierung Änderungen zu verarbeiten, ruft Sync Framework die ProcessFullEnumerationChangeBatch-Methode des Zielanbieters auf. Diese Methode stellt ein FullEnumerationChangeBatch-Objekt bereit, das die Änderungen des Quellenanbieters enthält.
Wenn der Zielanbieter das von Sync Framework bereitgestellte NotifyingChangeApplier-Objekt verwendet, muss der Zielanbieter zum Übernehmen der Änderungen die ApplyFullEnumerationChanges-Methode aufrufen. Für diese Methode ist eine nach Element-ID sortierte Auflistung aller Zieländerungen erforderlich, deren Element-IDs zwischen der DestinationVersionEnumerationRangeLowerBound-Eigenschaft und der DestinationVersionEnumerationRangeUpperBound-Eigenschaft des Quelländerungsbatchs liegen. Zum Übernehmen von Änderungen ruft das NotifyingChangeApplier-Objekt INotifyingChangeApplierTarget-Methoden wie bei einer gewöhnlichen Synchronisierung auf.
Verarbeiten von Änderungen mithilfe von nicht verwaltetem Code
Um während einer Wiederherstellungssynchronisierung Änderungen zu verarbeiten, ruft Sync Framework die IKnowledgeSyncProvider::ProcessFullEnumerationChangeBatch-Methode des Zielanbieters auf. Diese Methode stellt ein ISyncFullEnumerationChangeBatch-Objekt bereit, das die Änderungen des Quellenanbieters enthält.
Wenn der Zielanbieter das von Sync Framework bereitgestellte ISynchronousNotifyingChangeApplier-Objekt verwendet, muss der Zielanbieter zum Übernehmen der Änderungen die ISynchronousNotifyingChangeApplier::ApplyFullEnumerationChanges-Methode aufrufen. Für diese Methode ist eine nach Element-ID sortierte Auflistung aller Zieländerungen erforderlich, deren Element-IDs zwischen der ISyncFullEnumerationChangeBatch::GetClosedLowerBoundItemId-Eigenschaft und der ISyncFullEnumerationChangeBatch::GetClosedUpperBoundItemId-Eigenschaft des Quelländerungsbatchs liegen. Zum Übernehmen von Änderungen ruft das ISynchronousNotifyingChangeApplier-Objekt ISynchronousNotifyingChangeApplierTarget-Schnittstelle-Methoden wie bei einer gewöhnlichen Synchronisierung auf.
Siehe auch
Konzepte
Synchronisierungsanbieter
Auflisten von Änderungen
Anwenden von Änderungen