Partager via


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.1 tandis que l'un des fournisseurs continue à utiliser Sync Framework 1.0. 

Prenons l'exemple des aspects de compatibilité suivants :

  • Compatibilité des interfaces. Par exemple, une application de synchronisation utilise Sync Framework 2.1 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 de la base de données. Le format de métadonnées utilisé par les fournisseurs de bases de données a été modifié dans Sync Framework 2.1. Un fournisseur de base de données Sync Framework 2.1 SQL Server peut synchroniser des bases de données qui utilisent le format de métadonnées 2.0 ou 2.1, ou vous pouvez effectuer une mise à niveau d'une base de données vers un nouveau format. Les fournisseurs de bases de données Sync Framework 2.1 SQL Server Compact effectuent automatiquement la mise à niveau de la base de données vers le nouveau format lorsqu'ils se connectent à celle-ci. Pour obtenir un guide de mise à niveau de votre communauté de synchronisation à partir de Sync Framework 2.0 vers Sync Framework 2.1 tout en gardant les bases de données synchronisées, consultez Mise à niveau de la communauté de synchronisation de bases de données.

  • Compatibilité des métadonnées de fournisseur personnalisé. Par exemple, une application de synchronisation utilise Sync Framework 2.1 et utilise des fournisseurs proxy pour se connecter aux fournisseurs personnalisés qui s'exécutent dans des processus séparés. Un fournisseur utilise Sync Framework 2.1 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.1 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.1.

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.1 est utilisé.

Lorsque la redirection d'assembly est utilisée, Sync Framework 2.1 est utilisé par tous les composants. Les composants Sync Framework présentent une compatibilité descendante. La synchronisation fonctionne correctement.

Sync Framework 1.0 est utilisé par l'application et E_NOINTERFACE est retourné lorsque le fournisseur est utilisé.

L'application utilise Sync Framework 2.1, un fournisseur utilise Sync Framework 1.0 et l'autre utilise Sync Framework 2.1.

Sync Framework 2.1 est utilisé par l'application et la redirection d'assembly est utilisée pour instancier les objets en version 2.1 pour le fournisseur 1.0. Les composants Sync Framework présentent une compatibilité descendante. La synchronisation fonctionne correctement.

Sync Framework 2.1 est utilisé par l'application et E_NOINTERFACE est retourné lorsque le fournisseur est utilisé.

L'application et les fournisseurs de bases de données utilisent Sync Framework 2.0 et les bases de données ont été mises à niveau vers le format de métadonnées 2.1.

Lorsque la redirection d'assembly est utilisée, tous les composants utilisent Sync Framework 2.1. Dans la mesure où les interfaces de fournisseur de base de données présentent une compatibilité descendante, l'application peut les utiliser sans être recompilée. Les fournisseurs utilisent le nouveau format de métadonnées dans les bases de données mises à niveau et la synchronisation fonctionne correctement.

Les fournisseurs de bases de données sont uniquement disponibles en code managé.

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.1 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 un fichier de configuration d'application (AppName.exe.config) dans le même dossier que celui du fichier exécutable de l'application managée. Le fichier de configuration d'application spécifie que tout composant qui utilise les assemblys Sync Framework 1.0 sera redirigé de façon à utiliser les assemblys Sync Framework 2.1. N'oubliez pas que les composants de fournisseurs de bases de données ont un numéro de version supérieur à celui des autres composants Sync Framework. Par conséquent, dans Sync Framework 2.1, les assemblys de fournisseur de base de données ont le numéro de version 3.1. L'exemple suivant montre ce à quoi peut ressembler le fichier AppName.exe.config pour un projet qui synchronise les bases de données SQL Server et SQL Server Compact.

<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-2.0.0.0"
                                 newVersion="2.1.0.0" />
            </dependentAssembly>
            <dependentAssembly>
              <assemblyIdentity name="Microsoft.Synchronization.Data"
                                publicKeyToken="89845dcd8080cc91"
                                culture="neutral" />
              <bindingRedirect oldVersion="1.0.0.0-3.0.0.0"
                               newVersion="3.1.0.0" />
            </dependentAssembly>
            <dependentAssembly>
              <assemblyIdentity name="Microsoft.Synchronization.Data.SqlServer"
                                publicKeyToken="89845dcd8080cc91"
                                culture="neutral" />
              <bindingRedirect oldVersion="1.0.0.0-3.0.0.0"
                               newVersion="3.1.0.0" />
            </dependentAssembly>
            <dependentAssembly>
              <assemblyIdentity name="Microsoft.Synchronization.Data.SqlServerCe"
                                publicKeyToken="89845dcd8080cc91"
                                culture="neutral" />
              <bindingRedirect oldVersion="1.0.0.0-3.0.0.0"
                               newVersion="3.1.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Compatibilité des métadonnées de la base de données

Le format des métadonnées utilisé par les fournisseurs de bases de données a été modifié dans Sync Framework 2.1. Comme Sync Framework 2.1 peut fonctionner en mode de compatibilité descendante, vous pouvez mettre à niveau votre communauté tout en gardant vos bases de données synchronisées. Pour plus d'informations, consultez Mise à niveau de la communauté de synchronisation de bases de données.

Pour les bases de données SQL Server, lorsque la classe SqlSyncProvider est utilisée pour effectuer une synchronisation, SqlSyncProvider détecte si la base de données utilise le format de métadonnées 2.0 ou 2.1. Lorsqu'une base de données utilise le format 2.0, le fournisseur opère en mode de compatibilité descendante de façon à ce que la synchronisation continue à fonctionner correctement. Gardez à l'esprit que les opérations autres que la synchronisation, telles que l'approvisionnement, lèvent DbVersionException lorsque la version de la base de données ne correspond pas à la version du composant Sync Framework. Lorsque vous êtes prêt à effectuer la mise à niveau du format des métadonnées de la base de données, vous pouvez utiliser la classe SqlSyncStoreMetadataUpgrade pour effectuer cette opération.

Pour les bases de données SQL Server Compact, tous les composants Sync Framework détectent la version de la base de données et effectuent automatiquement la mise à niveau du format des métadonnées lorsque la version ne correspond pas à celle du composant Sync Framework. Une base de données SQL Server Compact peut également être explicitement mise à niveau à l'aide de la classe SqlCeSyncStoreMetadataUpgrade.

Notes

Une fois qu'une base de données a été mise à niveau vers le format de métadonnées 2.1, elle ne peut plus être synchronisée par un fournisseur qui utilise une version antérieure de Sync Framework. Lorsque SqlSyncProvider de Sync Framework 2.0 essaie de synchroniser une base de données au format 2.1, Sync Framework lève SqlException avec un message semblable au suivant : Nom de colonne 'scope_name' non valide. Lorsque SqlCeSyncProvider de Sync Framework 2.0 essaie de synchroniser une base de données au format 2.1, Sync Framework lève DbSyncException avec le message suivant : Une erreur s'est produite lors de l'initialisation d'adaptateurs pour l'étendue '<scope name>'. Assurez-vous que le nom d'étendue spécifié sur le fournisseur existe dans la table de métadonnées de l'étendue et que les tables de base spécifiées pour cette étendue sont correctes.

Dans les deux cas, vous devez effectuer une mise à niveau vers Sync Framework 2.1 et recompiler votre application ou utiliser une redirection de liaison pour charger les composants Sync Framework 2.1, car la mise à niveau du format des métadonnées ne peut pas être annulée.

Dans la mesure où les composants Sync Framework 2.0 ne peuvent pas fonctionner sur une base de données qui utilise le format de métadonnées 2.1, veillez à effectuer la mise à niveau de la base de données et des composants dans le bon ordre. Pour plus d'informations, consultez Mise à niveau de la communauté de synchronisation de bases de données.

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.1 et se connecte à deux fournisseurs à l'aide des fournisseurs proxy construits à l'aide de Sync Framework 2.1. Un fournisseur distant utilise Sync Framework 1.0 et l'autre utilise Sync Framework 2.1. Aucun fournisseur n'utilise l'applicateur de modifications Sync Framework. La synchronisation peut s'effectuer tant que le fournisseur 2.1 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.1. 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.1. La synchronisation peut s'effectuer tant que le fournisseur 2.1 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.1 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.1 inclut deux niveaux de compatibilité. Même lorsque les deux fournisseurs utilisent Sync Framework 2.1, 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.1  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 le niveau de compatibilité minimal 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 plus élevé est utilisée, le niveau de compatibilité minimal est relevé. 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.

Voir aussi

Autres ressources

Installation, redistribution et compatibilité des versions