Abwärtskompatibilität und Interoperabilität für Sync Framework

Auf einem Computer können parallel verschiedene Versionen von Sync Framework installiert sein, damit Anwendungen und Anbieter, die für eine bestimmte Version von Sync Framework geschrieben wurden, auch weiterhin erwartungsgemäß funktionieren, wenn neuere Versionen von Sync Framework veröffentlicht werden. Da sich jedoch die Version von Sync Framework, die eine Synchronisierungsanwendung oder ein Anbieter verwendet, unabhängig von anderen Komponenten ändern kann, müssen Sie unbedingt sicherstellen, dass die Replikate in einer Synchronisierungscommunity weiterhin miteinander synchronisiert werden können. Wenn zum Beispiel die Synchronisierungsanwendung auf die Verwendung von Sync Framework 2.0 aktualisiert wird, einer der Anbieter jedoch weiterhin Sync Framework 1.0 verwendet.

Zwei Hauptbereiche der Kompatibilität müssen berücksichtigt werden:

  • Schnittstellenkompatibilität. Eine Synchronisierungsanwendung verwendet beispielsweise Sync Framework 2.0 und stellt im gleichen Prozess Verbindungen zu Anbietern her. Einer der Anbieter verwendet Sync Framework 1.0. In verwaltetem Code kann Schnittstellenkompatibilität durch die Verwendung von Assemblyumleitung erzielt werden. In nicht verwaltetem Code sind Schnittstellen nicht kompatibel.

  • Metadatenkompatibilität. Eine Synchronisierungsanwendung verwendet zum Beispiel Sync Framework 2.0 und verwendet für die Verbindung zu Providern, die in separaten Prozessen ausgeführt werden, Proxyanbieter. Ein Anbieter verwendet Sync Framework 2.0, und der andere verwendet Sync Framework 1.0. Wenn von allen Komponenten nur Funktionen verwendet werden, die mit der Komponente mit der niedrigsten Version kompatibel sind, kann Metadatenkompatibilität mithilfe von Serialisierung erzielt werden.

Hinweis

Code, der für Sync Framework 1.0 geschrieben wurde, kann für Sync Framework 2.0 ohne Änderung neu kompiliert werden. Um jedoch Metadatenkompatibilität sicherzustellen, muss bei jeder Serialisierung von Metadatenobjekten ein Kompatibilitätsgrad von SyncFrameworkVersion1 (für verwalteten Code) oder von SYNC_SERIALIZATION_VERSION_V1 (für nicht verwalteten Code) angegeben werden.

Schnittstellenkompatibilität

Schnittstellenkompatibilität ist wichtig, wenn die Synchronisierungsanwendung eine andere Version von Sync Framework verwendet als einer der Anbieter.

Wenn die Synchronisierungskomponenten im gleichen Prozess ausgeführt werden, müssen die Schnittstellen kompatibel sein. In der folgenden Tabelle wird aufgeführt, wie Komponenten mit unterschiedlichen Versionen zusammen verwendet werden können, wenn sie im gleichen Prozess ausgeführt werden.

Komponenten Verwalteter Code Nicht verwalteter Code

Die Anwendung verwendet Sync Framework 1.0, ein Anbieter verwendet Sync Framework 1.0, und der andere Anbieter verwendet Sync Framework 2.0.

Wenn keine Assemblyumleitung verwendet wird, verwendet die Anwendung Sync Framework 1.0, und bei Verwendung des 2.0-Anbieters wird InvalidCastException ausgelöst.

Bei Verwendung der Assemblyumleitung verwenden alle Komponenten Sync Framework 2.0. Sync Framework-Komponenten sind abwärtskompatibel, sodass die Synchronisierung ordnungsgemäß funktioniert.

Sync Framework 1.0 wird von der Anwendung verwendet, und bei Verwendung des Anbieters wird E_NOINTERFACE zurückgegeben.

Die Anwendung verwendet Sync Framework 2.0, ein Anbieter verwendet Sync Framework 1.0, und der andere Anbieter verwendet Sync Framework 2.0.

Sync Framework 2.0 wird von der Anwendung verwendet, und mithilfe der Assemblyumleitung werden Objekte der Version 2.0 für den 1.0-Anbieter instanziiert. Sync Framework-Komponenten sind abwärtskompatibel, sodass die Synchronisierung ordnungsgemäß funktioniert.

Sync Framework 2.0 wird von der Anwendung verwendet, und bei Verwendung des Anbieters wird E_NOINTERFACE zurückgegeben.

Umleiten der Version der von einem Anbieter verwendeten Sync Framework-Assemblys

Wenn eine Anwendung und die Anbieter, mit denen eine Verbindung hergestellt wird, in verwaltetem Code geschrieben sind, kann mithilfe der Assemblyumleitung sichergestellt werden, dass von allen in der Anwendung geladenen Komponenten eine bestimmte Version der Sync Framework-Assemblys verwendet wird. Dies ist nützlich, wenn eine Anwendung Sync Framework 2.0 verwendet, während einer der geladenen Anbieter Sync Framework 1.0 verwendet, da das Standardverhalten des 1.0-Anbieters die Verwendung der Sync Framework 1.0-Assemblys ist. Dies bewirkt, dass die Anwendung eine InvalidCastException auslöst, wenn der Anbieter geladen wird.

Um die Assemblyumleitung zu verwenden, schließen Sie in das verwaltete Anwendungsprojekt eine Anwendungskonfigurationsdatei (AppName.exe.config) ein, die angibt, dass jede Komponente, die die Sync Framework 1.0-Assemblys verwendet, zur Verwendung der Sync Framework 2.0-Assemblys umgeleitet wird. Das folgende Beispiel zeigt, wie die Datei AppName.exe.config aussehen könnte.

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Synchronization"
                                  publicKeyToken="89845dcd8080cc91"
                                  culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-1.9.9.9"
                                 newVersion="2.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Metadatenkompatibilität

Synchronisierungskomponenten unterschiedlicher Versionen können untereinander Metadaten austauschen, wenn die gemeinsam verwendeten Metadaten den gleichen Kompatibilitätsgrad haben. Sync Framework definiert die CompatibilityLevel-Enumeration (für verwalteten Code) und die SYNC_SERIALIZATION_VERSION-Enumeration (für nicht verwalteten Code), um die Version der innerhalb der Synchronisierungskomponenten enthaltenen Metadaten anzugeben. Die folgenden Szenarien treten häufig auf:

  • Die Anwendung verwendet Sync Framework 2.0 und stellt mithilfe von Proxyanbietern Verbindungen zu zwei Anbietern her, die mit Sync Framework 2.0 erstellt wurden. Ein Remoteanbieter verwendet Sync Framework 1.0, und der andere Anbieter verwendet Sync Framework 2.0. Keiner der Anbieter verwendet den Sync Framework-Änderungsanwender. Die Synchronisierung kann durchgeführt werden, solange der 2.0-Anbieter keine Funktionen verwendet, die mit dem 1.0-Anbieter inkompatibel sind. Der Proxyanbieter tauscht mithilfe von Serialisierung und einem Kompatibilitätsgrad von SyncFrameworkVersion1 (für verwalteten Code) oder SYNC_SERIALIZATION_VERSION_V1 (für nicht verwalteten Code) Metadaten mit dem 1.0-Anbieter aus. Beachten Sie, dass in diesem Fall die Synchronisierung fehlschlägt, wenn kein Anbieter den Sync Framework-Änderungsanwender verwendet.

  • Die Anwendung und beide Anbieter verwenden Sync Framework 2.0. Ein Anbieter wurde für die Verwendung mit den Synchronisierungskomponenten des Windows 7-Betriebssystems entwickelt, und der andere wurde mit Sync Framework 2.0 erstellt. Die Synchronisierung kann durchgeführt werden, solange der 2.0-Anbieter nur Funktionen verwendet, die mit den Synchronisierungskomponenten des Windows 7-Betriebssystems kompatibel sind. In diesem Fall wird als Kompatibilitätsgrad der Metadatenobjekte WindowsSync (für verwalteten Code) oder SYNC_SERIALIZATION_VERSION_V2 (für nicht verwalteten Code) angegeben. Wenn der 2.0-Anbieter eine Funktion aus einer späteren Version verwendet, zum Beispiel benutzerdefinierte Filter, schlägt die Synchronisierung fehl.

Verwalteter Code: Die Metadatenklassen, die Serialisierungsversionen unterstützen, sind ChangeBatchBase, SyncKnowledge und von diesen Klassen abgeleitete Klassen, zum Beispiel ChangeBatch und ForgottenKnowledge. Beispielsweise serialisiert ein 2.0-Anbieter ein SyncKnowledge-Objekt in das 1.0-Format, indem er die CompatibilityLevel-Eigenschaft auf SyncFrameworkVersion1 festlegt und Serialize aufruft. Wenn das Objekt Elemente enthält, die nicht in das 1.0-Format serialisiert werden können, wird bei Festlegung der CompatibilityLevel-Eigenschaft InvalidKnowledgeVersionException ausgelöst.

Nicht verwalteter Code: Die Metadatenschnittstellen, die Serialisierungsversionen unterstützen, sind ISyncKnowledge, ISyncChangeBatchBase2 sowie abgeleitete oder verknüpfte Schnittstellen, zum Beispiel IForgottenKnowledge und ISyncChangeBatch. Beispielsweise serialisiert ein 2.0-Anbieter ein ISyncKnowledge2-Objekt in das 1.0-Format, indem er für die ISyncKnowledge2::SerializeWithOptions-Methode eine Serialisierungsversion von SYNC_SERIALIZATION_VERSION_V1 angibt. Wenn das Objekt Elemente enthält, die nicht in das 1.0-Format serialisiert werden können, wird SYNC_E_INVALID_SERIALIZATION_VERSION zurückgegeben.

Beachten Sie, dass Sync Framework 2.0 zwei Kompatibilitätsgrade enthält. Selbst wenn beide Anbieter Sync Framework 2.0 verwenden, sollten Sie unbedingt sicherstellen, dass die verwendeten Metadaten kompatibel sind, unabhängig davon, ob beide Komponenten im gleichen Prozess verwendet werden oder per Serialisierung zusammenarbeiten.

In der folgenden Tabelle sind Sync Framework 2.0-Funktionen aufgelistet, die Auswirkungen auf das Metadatenformat, ihren Kompatibilitätsgrad und einige Beispielklassen oder -methoden haben, die in dieser Funktion enthalten sind:

Funktion Kompatibilitätsgrad Beispielklassen bzw. -methoden

Änderungseinheitsfilter

WindowsSync (für verwalteten Code) oder SYNC_SERIALIZATION_VERSION_V2 (für nicht verwalteten Code)

ChangeUnitListFilterInfo (für verwalteten Code), IChangeUnitListFilterInfo-Schnittstelle (für nicht verwalteten Code)

Einschränkungskonflikte

SyncFrameworkVersion2 (für verwalteten Code) oder SYNC_SERIALIZATION_VERSION_V3 (für nicht verwalteten Code)

RecordConstraintConflictForItem (für verwalteten Code), ISaveChangeContext2::SetConstraintConflictOnChange (für nicht verwalteten Code)

Benutzerdefinierte Filter

SyncFrameworkVersion2 (für verwalteten Code) oder SYNC_SERIALIZATION_VERSION_V3 (für nicht verwalteten Code)

CustomFilterInfo (für verwalteten Code), ICustomFilterInfo-Schnittstelle (für nicht verwalteten Code)

Der minimale Kompatibilitätsgrad eines Wissensobjekts entspricht den verwendeten Wissensfunktionen. Der Kompatibilitätsgrad, der zum Serialisieren eines Wissensobjekt verwendet wird, darf nicht unter dem minimalen Kompatibilitätsgrad liegen. Ein Wissensobjekt wird in der Regel mit einem minimalen Kompatibilitätsgrad von SyncFrameworkVersion1 (für verwalteten Code) oder SYNC_SERIALIZATION_VERSION_V1 (für nicht verwalteten Code) initialisiert. Wenn eine Funktion verwendet wird, für die ein höherer minimaler Kompatibilitätsgrad erforderlich ist, wird der minimale Kompatibilitätsgrad erhöht. Beispielsweise wird einem Wissensobjekt ein Marker hinzugefügt, um benutzerdefinierte Filterung zu unterstützen. Der minimale Kompatibilitätsgrad des Wissensobjekts wird auf SyncFrameworkVersion2 (für verwalteten Code) oder SYNC_SERIALIZATION_VERSION_V3 (für nicht verwalteten Code) erhöht. Bei Versuchen, das Wissensobjekt auf einen niedrigeren Grad zu serialisieren, treten Fehler auf. Das Gleiche gilt für Versuche, das Wissensobjekt mit einem Anbieter zu verwenden, der nur für die Verwendung mit einem niedrigeren Kompatibilitätsgrad entwickelt wurde.

Metadaten-Speicherdienst-Kompatibilität

Sync Framework stellt mehrere Mechanismen bereit, um für Komponenten aus unterschiedlichen Versionen die Interoperabilität mit Metadaten zu ermöglichen, die mit dem Metadaten-Speicherdienst gespeichert werden. Weitere Informationen finden Sie unter Zugreifen auf Metadaten von Komponenten anderer Versionen und Aktualisieren der Metadatenspeicherversion.

Siehe auch

Konzepte

Installation, Weiterverteilung und Versionskompatibilität