Konfliktbehandlung
Um sicherzustellen, dass an Elementen in der Synchronisierungscommunity vorgenommene Änderungen ordnungsgemäß weitergegeben werden, muss der Zielanbieter Konflikte zwischen den vom Quellenanbieter gesendeten Elementen und den Elementen im Zielreplikat erkennen und auflösen. Sync Framework stellt Änderungsanwenderobjekte bereit, die bei der Erkennung und Behandlung von Konflikten die Hauptarbeit übernehmen.
Sync Framework unterstützt zwei Arten von Konflikten, die beim Synchronisieren auftreten können: Parallelitätskonflikte und Einschränkungskonflikte. Parallelitätskonflikte treten auf, wenn dasselbe Element oder dieselbe Änderungseinheit auf zwei verschiedenen Replikaten geändert werden, die später synchronisiert werden. Einschränkungskonflikte sind Konflikte, bei denen Elementen oder Änderungseinheiten auferlegte Einschränkungen (z. B. die Beziehung zwischen Ordnern oder der Speicherort identisch benannter Daten innerhalb eines Dateisystems) verletzt werden.
Sync Framework stellt zwei Arten der Konfliktbehandlung zur Verfügung, die für Synchronisierungsanwendungen festgelegt werden können: das Festlegen einer Richtlinie zur Konfliktauflösung, die für alle während einer Sitzung auftretenden Konflikte gilt, oder das Registrieren für die Zustellung von Benachrichtigungen über jeden erkannten Konflikt, sodass jeder Konflikt einzeln untersucht und gelöst werden kann.
Ablaufsteuerung der Konfliktbehandlung
Während der Synchronisierung werden Konflikte in der Phase der Änderungsübernahme erkannt und behandelt. In der Regel tritt dies in der ProcessChangeBatch)-Methode (für verwalteten Code) oder in der ProcessChangeBatch-Methode (für nicht verwalteten Code) des Zielanbieters auf.
Wenn der Zielanbieter einen Sync Framework-Änderungsanwender verwendet, werden für jedes Element im Änderungsbatch die folgenden Schritte ausgeführt.
Der Änderungsanwender überprüft, ob das Element im Zielreplikats Aktualisierungen enthält, die für das Element einen Parallelitätskonflikt mit der Quelländerung auslösen. Wenn das Element beispielsweise lokal sowohl im Quell- als auch im Zielreplikat geändert wurde, wird ein Aktualisierungskonflikt erkannt.
Wenn für die Anwendung eine Richtlinie zur Auflösung von Parallelitätskonflikten festgelegt ist, weist der Änderungsanwender anhand dieser Richtlinie eine Konfliktauflösungsaktion zu. Andernfalls wird die Anwendung durch den Änderungsanwender über den Konflikt benachrichtigt, und in der Anwendung wird eine Konfliktauflösungsaktion festgelegt.
Der Änderungsanwender leitet einen Aufruf an den Zielanbieter weiter, sodass die Änderung auf Grundlage der Konfliktauflösungsaktion übernommen wird. Diese könnte beispielsweise lauten: Lösche das Element aus dem Zielreplikat, und ersetze es durch das Element des Quellenanbieters.
Wenn die Änderung vom Zielanbieter auf das Zielreplikat angewendet wird, erkennt der Zielanbieter Einschränkungskonflikte. Angenommen, die Quelländerung wird durch id1 unter dem Namen „Lieblingsplatten“ identifiziert. Das Zielreplikat enthält jedoch ebenfalls ein Element mit dem Namen „Lieblingsplatten“, das durch id2 identifiziert wird. Die Elemente werden vom Zielreplikat als identisch interpretiert, da sie gleich benannt sind. Sync Framework erkennt jedoch verschiedene Elemente, da sie verschiedene Element-IDs haben. Der Zielanbieter meldet dem Änderungsanwender einen Einschränkungskonflikt.
Wenn in der Anwendung eine Richtlinie zur Kollisionskonfliktauflösung festgelegt ist und der Einschränkungskonflikt auf einer Kollision beruht, weist der Änderungsanwender auf Grundlage der Richtlinie eine Konfliktauflösungsaktion zu. Andernfalls wird die Anwendung durch den Änderungsanwender über den Konflikt benachrichtigt, und in der Anwendung wird eine Konfliktauflösungsaktion festgelegt.
Der Änderungsanwender leitet einen Aufruf an den Zielanbieter weiter, sodass die Änderung auf Grundlage der Konfliktauflösungsaktion übernommen wird.
Weitere Informationen zur Behandlung von Parallelitätskonflikten finden Sie unter Erkennen und Auflösen von Parallelitätskonflikten.
Weitere Informationen zur Behandlung von Einschränkungskonflikten finden Sie unter Erkennen und Auflösen von Einschränkungskonflikten.
Weniger Konflikte mithilfe von Änderungseinheiten
Die Anzahl an Konflikten kann reduziert werden, indem Sie Änderungen an Unterelementen mithilfe von Änderungseinheiten darstellen. Beim Verwenden von Änderungseinheiten werden Versionen nicht für das Element als Ganzes nachverfolgt, sondern für Änderungseinheiten. Daher führen Änderungen, die an verschiedenen Änderungseinheiten innerhalb desselben Elements vorgenommen werden, nicht zu einem Konflikt. Weitere Informationen finden Sie unter Synchronisieren von Änderungseinheiten.
Speichern von Konflikten in einem Protokoll
Es kann hilfreich sein, Konflikte in einem Protokoll zu speichern, damit sie auch außerhalb der Synchronisierungssitzung verarbeitet werden können, z. B. wenn der Benutzer die Konflikte durchgehen und über Lösungen entscheiden möchte. Wenn Einschränkungskonflikte durch das Zusammenführen der Daten der in Konflikt stehenden Elemente aufgelöst werden, kann der Änderungsanwender zudem gelegentlich das Konfliktprotokoll verwenden, um während einer Synchronisierungssitzung auftretende Konflikte zu speichern.
Weitere Informationen zum Erstellen und Verwenden eines Konfliktprotokolls finden Sie unter Protokollieren und Verwalten von Konflikten.
Siehe auch
Verweis
ISynchronousNotifyingChangeApplier-Schnittstelle
ISynchronousNotifyingChangeApplierTarget-Schnittstelle
NotifyingChangeApplier
INotifyingChangeApplierTarget
Konzepte
Implementieren eines benutzerdefinierten Standardanbieters
Anwenden von Änderungen