Compatibilité descendante et interopérabilité de Sync Framework
Il est possible d'installer différentes versions de Sync Framework côte à côte sur un ordinateur afin que les applications et fournisseurs écrits pour une version spécifique de Sync Framework continuent de fonctionner comme prévu, même si de nouvelles versions de Sync Framework sont mises sur le marché. Toutefois, dans la mesure où la version de Sync Framework qu'une application ou un fournisseur de synchronisation utilise peut changer indépendamment d'autres composants, vous devez veiller à ce que les réplicas d'une communauté de synchronisation puissent continuer à se synchroniser entre eux. Par exemple, lorsque l'application de synchronisation est mise à niveau pour utiliser Sync Framework 2.0 tandis que l'un des fournisseurs continue à utiliser Sync Framework 1.0.
Les principaux aspects de compatibilité à prendre en considération sont au nombre de deux :
Compatibilité des interfaces. Par exemple, une application de synchronisation utilise Sync Framework 2.0 et se connecte aux fournisseurs dans le même processus. L'un des fournisseurs utilise Sync Framework 1.0. La compatibilité des interfaces peut être assurée dans le code managé à l'aide de la redirection d'assembly. Les interfaces ne sont pas compatibles dans le code non managé.
Compatibilité des métadonnées. Par exemple, une application de synchronisation utilise Sync Framework 2.0 et utilise des fournisseurs proxy pour se connecter aux fournisseurs qui s'exécutent dans des processus séparés. Un fournisseur utilise Sync Framework 2.0 et l'autre utilise Sync Framework 1.0. La compatibilité des métadonnées peut être assurée à l'aide de la sérialisation lorsque tous les composants utilisent uniquement des fonctionnalités qui sont compatibles avec le composant dont la version est la plus ancienne.
Notes
Le code écrit pour Sync Framework 1.0 peut être recompilé pour Sync Framework 2.0 sans modification. Toutefois, pour garantir la compatibilité des métadonnées, un niveau de compatibilité de SyncFrameworkVersion1 (pour le code managé) ou SYNC_SERIALIZATION_VERSION_V1 (pour le code non managé) doit être spécifié chaque fois que les objets de métadonnées sont sérialisés.
Compatibilité des interfaces
La compatibilité des interfaces est importante lorsque l'application de synchronisation utilise une version de Sync Framework différente de celle utilisée par l'un des fournisseurs ou par les deux.
Lorsque les composants de synchronisation s'exécutent dans le même processus, les interfaces doivent être compatibles. Le tableau suivant résume la façon dont des composants de différentes versions peuvent être utilisés ensemble lorsqu'ils s'exécutent dans le même processus.
Composants | Code managé | Code non managé |
---|---|---|
L'application utilise Sync Framework 1.0, un fournisseur utilise Sync Framework 1.0 et l'autre utilise Sync Framework 2.0. |
Lorsque la redirection d'assembly n'est pas utilisée, Sync Framework 1.0 est utilisé par l'application et InvalidCastException est levée lorsque le fournisseur 2.0 est utilisé. Lorsque la redirection d'assembly est utilisée, Sync Framework 2.0 est utilisé par tous les composants. Les composants Sync Framework présentent une compatibilité descendante, de sorte que la synchronisation fonctionne correctement. |
Sync Framework 1.0 est utilisé par l'application et E_NOINTERFACE est retournée lorsque le fournisseur est utilisé. |
L'application utilise Sync Framework 2.0, un fournisseur utilise Sync Framework 1.0 et l'autre utilise Sync Framework 2.0. |
Sync Framework 2.0 est utilisé par l'application et la redirection d'assembly est utilisée pour instancier les objets en version 2.0 pour le fournisseur 1.0. Les composants Sync Framework présentent une compatibilité descendante de sorte que la synchronisation fonctionne correctement. |
Sync Framework 2.0 est utilisé par l'application et E_NOINTERFACE est retournée lorsque le fournisseur est utilisé. |
Redirection de la version des assemblys Sync Framework utilisée par un fournisseur
Lorsqu'une application et les fournisseurs auxquels elle se connecte sont écrits en code managé, la redirection d'assembly peut être utilisée pour garantir qu'une version particulière des assemblys Sync Framework sera utilisée par tous les composants que charge l'application. Cela peut être pratique lorsqu'une application utilise Sync Framework 2.0 et que l'un des fournisseurs qu'elle charge utilise Sync Framework 1.0, car le comportement par défaut veut que le fournisseur 1.0 utilise des assemblys Sync Framework 1.0. Dans ce cas, en effet, l'application peut lever InvalidCastException au chargement du fournisseur.
Pour utiliser la redirection d'assembly, incluez dans le projet de l'application managée un fichier de configuration d'application (AppName.exe.config) qui spécifie que tout composant qui utilise les assemblys Sync Framework 1.0 sera redirigé de façon à utiliser les assemblys Sync Framework 2.0. L'exemple suivant montre ce à quoi peut ressembler le fichier AppName.exe.config.
<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>
Compatibilité des métadonnées
Des composants de synchronisation de différentes versions peuvent échanger des métadonnées si les métadonnées qu'ils partagent présentent le même niveau de compatibilité. Sync Framework définit l'énumération CompatibilityLevel (pour le code managé) et l'énumération SYNC_SERIALIZATION_VERSION (pour le code non managé) pour indiquer la version des métadonnées contenues dans les composants de synchronisation. Voici quelques scénarios courants :
L'application utilise Sync Framework 2.0 et se connecte à deux fournisseurs à l'aide des fournisseurs proxy construits à l'aide de Sync Framework 2.0. Un fournisseur distant utilise Sync Framework 1.0 et l'autre utilise Sync Framework 2.0. Aucun fournisseur n'utilise l'applicateur de modifications Sync Framework. La synchronisation peut s'effectuer tant que le fournisseur 2.0 n'utilise pas toutes les fonctionnalités qui sont incompatibles avec le fournisseur 1.0. Le fournisseur proxy échange des métadonnées avec le fournisseur 1.0 à l'aide de la sérialisation et un niveau de compatibilité de SyncFrameworkVersion1 (pour le code managé) ou SYNC_SERIALIZATION_VERSION_V1 (pour le code non managé). Gardez à l'esprit que dans ce cas, si l'un des fournisseurs utilise l'applicateur de modifications Sync Framework, la synchronisation échouera.
L'application et les deux fournisseurs utilisent Sync Framework 2.0. Un fournisseur est conçu pour utiliser les composants de synchronisation du système d'exploitation Windows 7 et l'autre, pour utiliser Sync Framework 2.0. La synchronisation peut s'effectuer tant que le fournisseur 2.0 utilise uniquement des fonctionnalités qui sont compatibles avec les composants de synchronisation du système d'exploitation Windows 7. Dans ce cas, le niveau de compatibilité des objets de métadonnées est spécifié pour être WindowsSync (pour le code managé) ou SYNC_SERIALIZATION_VERSION_V2 (pour le code non managé). Si le fournisseur 2.0 utilise une fonctionnalité d'une version ultérieure, telle que les filtres personnalisés, la synchronisation échouera.
Code managé Les classes de métadonnées qui prennent en charge des versions de sérialisation sont ChangeBatchBase, SyncKnowledge et des classes sont dérivées de ces classes, notamment ChangeBatch et ForgottenKnowledge. À titre d'exemple, un fournisseur sérialise un objet SyncKnowledge au format 1.0 en affectant à la propriété CompatibilityLevel la valeur SyncFrameworkVersion1 et en appelant la méthode Serialize. Si l'objet contient des éléments qui ne peuvent pas être sérialisés au format 1.0, InvalidKnowledgeVersionException est levée lorsque la propriété CompatibilityLevel est définie.
Code non managé Les interfaces de métadonnées qui prennent en charge des versions de sérialisation sont ISyncKnowledge, ISyncChangeBatchBase2 et des interfaces dérivées ou connexes, telles qu'IForgottenKnowledge et ISyncChangeBatch. À titre d'exemple, un fournisseur sérialise un objet ISyncKnowledge2 au format 1.0 en spécifiant une version de sérialisation de SYNC_SERIALIZATION_VERSION_V1 à la méthode ISyncKnowledge2::SerializeWithOptions. Si l'objet contient des éléments qui ne peuvent pas être sérialisés au format 1.0, SYNC_E_INVALID_SERIALIZATION_VERSION est retourné.
N'oubliez pas que Sync Framework 2.0 inclut deux niveaux de compatibilité. Même lorsque les deux fournisseurs utilisent Sync Framework 2.0, veillez à vérifier la compatibilité des métadonnées qu'ils utilisent, et ce, que les composants soient tous deux exécutés dans le même processus ou qu'ils interagissent via une sérialisation.
Le tableau suivant répertorie les fonctionnalités Sync Framework 2.0 qui affectent le format des métadonnées, leur niveau de compatibilité et quelques exemples de classes ou de méthodes incluses dans cette fonctionnalité :
Fonctionnalité | Niveau de compatibilité | Exemples de classes ou méthodes |
---|---|---|
Filtres d'unités de modification |
WindowsSync (pour le code managé) ou SYNC_SERIALIZATION_VERSION_V2 (pour le code non managé) |
ChangeUnitListFilterInfo (pour le code managé), Interface IChangeUnitListFilterInfo (pour le code non managé) |
Conflits de contraintes |
SyncFrameworkVersion2 (pour le code managé) ou SYNC_SERIALIZATION_VERSION_V3 (pour le code non managé) |
RecordConstraintConflictForItem (pour le code managé), ISaveChangeContext2::SetConstraintConflictOnChange (pour le code non managé). |
Filtres personnalisés |
SyncFrameworkVersion2 (pour le code managé) ou SYNC_SERIALIZATION_VERSION_V3 (pour le code non managé) |
CustomFilterInfo (pour le code managé), Interface ICustomFilterInfo (pour le code non managé) |
Un objet de connaissance a un niveau de compatibilité minimal qui correspond aux fonctionnalités de connaissance utilisées. Le niveau de compatibilité utilisé pour sérialiser un objet de connaissance ne peut pas être inférieur au niveau de compatibilité minimal. Un objet de connaissance est généralement initialisé pour présenter un niveau de compatibilité minimal de SyncFrameworkVersion1 (pour le code managé) ou SYNC_SERIALIZATION_VERSION_V1 (pour le code non managé). Lorsqu'une fonctionnalité qui requiert un niveau de compatibilité minimal supérieur est utilisée, le niveau de compatibilité minimal est augmenté. Par exemple, un marqueur est ajouté à un objet de connaissance pour prendre en charge le filtrage personnalisé. Le niveau de compatibilité minimal de l'objet de connaissance passe à SyncFrameworkVersion2 (pour le code managé) ou SYNC_SERIALIZATION_VERSION_V3 (pour le code non managé). Les tentatives de sérialisation de l'objet de connaissance à un niveau inférieur échoueront, à l'instar des tentatives d'utilisation de l'objet de connaissance avec un fournisseur conçu pour utiliser uniquement un niveau de compatibilité inférieur.
Compatibilité du service de stockage des métadonnées
Sync Framework fournit divers mécanismes pour permettre aux composants de versions différentes d'interagir avec les métadonnées stockées à l'aide du service de stockage des métadonnées. Pour plus d'informations, consultez Accès aux métadonnées à partir de composants de versions différentes et Mise à niveau de la version de magasin des métadonnées.