Freigeben über


Auflisten von Änderungen

Wenn ein Quellenanbieter auf eine GetChangeBatch-Anforderung (bei verwaltetem Code) oder auf eine IKnowledgeSyncProvider::GetChangeBatch-Anforderung (bei nicht verwaltetem Code) antwortet, besteht die Aufgabe darin, einen Batch mit Änderungen zu generieren, die dem Zielreplikat nicht bekannt sind. Der Quellenanbieter legt fest, welche Elemente im Quellreplikat nicht im vom Zielanbieter gesendeten Wissensobjekt enthalten sind, und gibt einen Batch dieser Elemente zurück.

Jeder Änderungsbatch besteht aus den folgenden Informationen:

  • Die globalen IDs und Versionen der geänderten Elemente.

  • Tombstones, die dem Zielreplikat bekannt sein sollten.

  • Das Anwendungswissen. Hierbei handelt es sich um das Wissen des Quellreplikats zu dem Zeitpunkt, als die Änderungen vorgenommen wurden. Sync Framework berechnet das erlangte Wissen für das Ziel aus dem Anwendungswissen, wenn Änderungen vom Zielanbieter angewendet werden.

  • Das Vorwissen. Hierbei handelt es sich um das minimale Wissen, das ein Zielreplikat zur Verarbeitung dieses Batches von Änderungen benötigt. Wenn das Vorwissen nicht im Wissen des Zielreplikats enthalten ist, können diese Änderungen nicht verarbeitet werden.

  • Das vergessene Wissen des Quellreplikats. Dieses wird verwendet, um ein veraltetes Zielreplikat zu erkennen.

Änderungsenumeration zwischen zwei Replikaten

Dieser Abschnitt enthält ein Szenario, in dem der Prozess der Änderungsenumeration zwischen zwei Replikaten unter Verwendung der Sync Framework-Wissensschnittstellen beschrieben wird.

Hinweis

   Ein Replikat ist dafür verantwortlich, dass lokal vorgenommene Änderungen in seinem Wissen wiedergegeben werden, bevor ein Anbieter Änderungen auflistet. Dies kann erreicht werden, indem entweder das Wissen aktualisiert wird, wenn eine lokale Änderung vorgenommen wird, oder ein Metadatenverwaltungsdurchlauf ausgeführt wird, bevor Änderungen aufgelistet werden.

In diesem Szenario fordert ein Zielanbieter Änderungen vom Quellenanbieter an. Die Anforderung erfolgt in der folgenden Reihenfolge:

  1. Das Zielreplikat stellt sicher, dass alle lokal vorgenommenen Änderungen in seinem Wissen für den Bereich wiedergegeben werden, der mit dem Quellreplikat synchronisiert werden soll.

  2. Der Zielanbieter sendet das Wissen des Zielreplikats an den Quellenanbieter. Der Quellenanbieter empfängt das Wissen durch die GetChangeBatch-Methode (bei verwaltetem Code) bzw. die IKnowledgeSyncProvider::GetChangeBatch-Methode (bei nicht verwaltetem Code).

  3. Um einen Änderungsbatch zu erstellen, werden die Änderungen vom Quellenanbieter aufgelistet, im Quellreplikat und einzeln mit dem Wissen des Zielreplikats abgeglichen. Eine Änderung wird dem Änderungsbatch nur hinzugefügt, wenn sie nicht im Wissen des Zielreplikats enthalten ist. Der Änderungsbatch wird vom ChangeBatch-Objekt (bei verwaltetem Code) oder von der ISyncChangeBatch-Schnittstelle (bei nicht verwaltetem Code) dargestellt.

  4. Der Quellenanbieter gibt den Änderungsbatch an den Zielanbieter zurück.

Hinweis

   Ein Changeset kann u. U. sehr viele Änderungen enthalten. Um genügend Zeit für die Verarbeitung der Liste eingehender Änderungen zu haben, kann der Zielanbieter veranlassen, dass die Änderungen in Batches gesendet werden, indem er in der GetSyncBatchParameters-Methode (bei verwaltetem Code) bzw. GetSyncBatchParameters-Methode (bei nicht verwaltetem Code) für die Batchgröße eine Zahl ungleich null zurückgibt.

Wenn der Quellenanbieter Änderungseinheiten verwendet, um aufgelistete Unterelemente aus dem Quellreplikat darzustellen, werden anstatt des gesamten Elements nur die geänderten Änderungseinheiten gesendet. Weitere Informationen finden Sie unter Synchronisieren von Änderungseinheiten.

Behandeln von veralteten Änderungen

Beim Erstellen eines Änderungsbatches werden veraltete Änderungen automatisch ausgeschlossen. Bei einer veralteten Änderung handelt es sich um eine Änderung, die bereits im Wissen des Zielreplikats enthalten ist und nicht auf das Zielreplikat angewendet werden sollte. Beim Hinzufügen einer Änderung zu einem Änderungsbatch vergleicht Sync Framework die Version der Änderung mit dem Wissen des Zielreplikats. Die Änderung wird nur hinzugefügt, wenn sie nicht im Wissen des Zielreplikats enthalten ist. Dadurch wird der Umfang des Änderungsbatchs minimiert, und ein Anbieter kann einen einfacheren Algorithmus für das Auflisten von Änderungn implementieren, wie z. B. auf Basis der Taktanzahl.

Ein Anbieter kann eine eigene Überprüfung durchführen, um sicherzustellen, dass die Änderungen, die dem Änderungsbatch hinzugefügt werden, nicht veraltet sind. Dazu ermittelt der Anbieter, ob die globale ID und Version der Änderung im Wissen des Zielreplikats enthalten sind. Dies wird mithilfe der Contains-Methode (bei verwaltetem Code) bzw. der ISyncKnowledge::ContainsChange-Methode (bei nicht verwaltetem Code) ausgeführt. Wenn die Änderung nicht im Wissen enthalten ist, wird sie vom Anbieter zum Änderungsbatch hinzugefügt. Dadurch wird der Umfang des Änderungsbatchs minimiert. Außerdem ist dies hilfreich für Anbieter, die die Erstellung von Änderungsbatches vollständig steuern sollen.

Siehe auch

Verweis

ISyncKnowledge-Schnittstelle
ISyncChangeBatch-Schnittstelle
IKnowledgeSyncProvider-Schnittstelle
IKnowledgeSyncProvider::GetChangeBatch
SyncKnowledge
ChangeBatch
KnowledgeSyncProvider
GetChangeBatch

Konzepte

Synchronisierungsanbieter
Konfliktbehandlung
Synchronisierungswissen