Compartir a través de


Interoperabilidad y compatibilidad de Sync Framework con versiones anteriores

Se pueden instalar versiones diferentes de Sync Framework en un equipo en paralelo para que las aplicaciones y proveedores escritos en una determinada versión de Sync Framework sigan funcionando según lo esperado, aun cuando se publiquen nuevas versiones de Sync Framework. Sin embargo, como la versión de Sync Framework que una aplicación de sincronización o proveedor utiliza puede cambiar con independencia de otros componentes, se debe prestar atención para garantizar que las réplicas de una comunidad de sincronización puedan continuar sincronizándose entre sí. Por ejemplo, cuando una aplicación de sincronización se actualiza para utilizar Sync Framework 2.0, pero uno de los proveedores sigue utilizando Sync Framework 1.0.

Hay dos áreas de compatibilidad principales que deben tenerse en cuenta:

  • Compatibilidad de interfaces. Por ejemplo, una aplicación de sincronización utiliza Sync Framework 2.0 y se conecta a proveedores en el mismo proceso. Uno de los proveedores utiliza Sync Framework 1.0. La compatibilidad de interfaces se puede conseguir en código administrado mediante el uso de la redirección de ensamblados. Las interfaces no son compatibles en código no administrado.

  • Compatibilidad de metadatos. Por ejemplo, una aplicación de sincronización utiliza Sync Framework 2.0 y se sirve de proveedores proxy para conectarse a proveedores que se ejecutan en otros procesos. Uno de los proveedores utiliza Sync Framework 2.0 y el otro Sync Framework1.0. La compatibilidad de metadatos se pueden conseguir mediante la serialización cuando todos los componentes usan únicamente características que son compatibles con el componente de la versión más antigua.

Nota

El código escrito en Sync Framework 1.0 se puede compilar de nuevo en Sync Framework 2.0 sin necesidad de cambios. Sin embargo, para garantizar la compatibilidad de los metadatos, se debe especificar un nivel de compatibilidad para SyncFrameworkVersion1 (para código administrador) o SYNC_SERIALIZATION_VERSION_V1 (para código no administrado) cada vez que se serialicen objetos de metadatos.

Compatibilidad de interfaces

La compatibilidad de interfaces es importante cuando la aplicación de sincronización utiliza una versión de Sync Framework diferente de la que uno no varios proveedores utilizan.

Cuando los componentes de sincronización se ejecutan en el mismo proceso, las interfaces deben ser compatibles. En la tabla siguiente se muestra cómo pueden utilizarse a la vez componentes de distintas versiones cuando se ejecutan en el mismo proceso.

Componentes Código administrado Código no administrado

La aplicación utiliza Sync Framework 1.0, un proveedor utiliza Sync Framework 1.0 y el otro proveedor utiliza Sync Framework 2.0.

Cuando la redirección de ensamblados no se utiliza, la aplicación utiliza Sync Framework 1.0 y se produce la excepción InvalidCastException cuando se utiliza el proveedor 2.0.

Cuando se utiliza la redirección de ensamblados, todos los componentes utilizan Sync Framework 2.0. Los componentes de Sync Framework son compatibles con las versiones anteriores, por lo que la sincronización funciona correctamente.

La aplicación utiliza Sync Framework 1.0 y se devuelve E_NOINTERFACE cuando se utiliza el proveedor.

La aplicación utiliza Sync Framework 2.0, un proveedor utiliza Sync Framework 1.0 y el otro proveedor utiliza Sync Framework 2.0.

La aplicación utiliza Sync Framework 2.0 y se usa la redirección de ensamblados para crear instancias de los objetos de la versión 2.0 para el proveedor de la versión 1.0. Los componentes de Sync Framework son compatibles con las versiones anteriores, por lo que la sincronización funciona correctamente.

La aplicación utiliza Sync Framework 2.0 y se devuelve E_NOINTERFACE cuando se utiliza el proveedor.

Redirigir la versión de los ensamblados de Sync Framework que un proveedor utiliza

Cuando una aplicación y los proveedores a los que se conecta se escriben en código administrado, la redirección de los ensamblados se puede utilizar para asegurarse de que puede utilizarse una determinada versión de los ensamblados de Sync Framework en todos los componentes que la aplicación carga. Esto resulta útil cuando una aplicación utiliza Sync Framework 2.0 y uno de los proveedores que carga utiliza Sync Framework 1.0, pues el comportamiento predeterminado es que el proveedor 1.0 utilice los ensamblados de Sync Framework 1.0. Si esto ocurre, la aplicación inicia la excepción InvalidCastException cuando se carga el proveedor.

Para utilizar la redirección de ensamblados, incluya un archivo de configuración de la aplicación (AppName.exe.config) en el proyecto de la aplicación administrada que especifique que cualquier componente que utilice los ensamblados de Sync Framework 1.0 se redirigirá para que utilice los ensamblados de Sync Framework 2.0. En el ejemplo siguiente, se muestra el aspecto que podría tener el archivo 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>

Compatibilidad de metadatos

Los componentes de sincronización de versiones distintas pueden intercambiar metadatos entre sí si los metadatos que comparten tienen el mismo nivel de compatibilidad. Sync Framework define la enumeración CompatibilityLevel (para código administrado) y la enumeración SYNC_SERIALIZATION_VERSION (para código no administrado) con el fin de indicar la versión de los metadatos incluidos en los componentes de sincronización. Algunos de los escenarios comunes son los siguientes:

  • La aplicación se sirve de Sync Framework 2.0 y se conecta a dos proveedores mediante proveedores proxy creados con Sync Framework 2.0. Un proveedor remoto utiliza Sync Framework 1.0 y el otro proveedor Sync Framework 2.0. Ninguno de los proveedores utiliza el aplicador de cambios de Sync Framework. La sincronización se puede llevar a cabo siempre que el proveedor 2.0 no utilice ninguna de las características que no son compatibles con el proveedor 1.0. El proveedor proxy intercambia los metadatos con el proveedor 1.0 mediante la serialización y un nivel de compatibilidad de SyncFrameworkVersion1 (para código administrado) o SYNC_SERIALIZATION_VERSION_V1 (para código no administrado). Tenga en cuenta que, en este caso, si cualquiera de los proveedores utilizara el aplicador de cambios de Sync Framework la sincronización producirá un error.

  • La aplicación y ambos proveedores utilizan Sync Framework 2.0. Uno de los proveedores se ha diseñado para operar con los componentes de sincronización del sistema operativo Windows 7 y el otro se ha creado mediante el uso de Sync Framework 2.0. La sincronización se puede llevar a cabo siempre que el proveedor 2.0 utilice únicamente características compatibles con los componentes de sincronización del sistema operativo Windows 7. En este caso, el nivel de compatibilidad de los objetos de metadatos se especifica en WindowsSync (para código administrado) o SYNC_SERIALIZATION_VERSION_V2 (para código no administrado). Si el proveedor 2.0 utiliza una característica de una versión posterior, como los filtros personalizados, la sincronización producirá un error.

Código administrado Las clases de metadatos que admiten las versiones de serialización son ChangeBatchBase, SyncKnowledge y las clases que derivan de las anteriores, como ChangeBatch y ForgottenKnowledge. A modo de ejemplo, un proveedor serializa un objeto SyncKnowledge con el formato de la versión 1.0 estableciendo la propiedad CompatibilityLevel en SyncFrameworkVersion1 y llamando a Serialize. Si el objeto contiene elementos que no se pueden serializar con el formato 1.0, se inicia la excepción InvalidKnowledgeVersionException cuando se establece la propiedad CompatibilityLevel.

Código no administrado Los interfaces de metadatos que admiten versiones de serialización son ISyncKnowledge, ISyncChangeBatchBase2 y las interfaces derivadas o relacionadas, como IForgottenKnowledge y ISyncChangeBatch. A modo de ejemplo, un proveedor serializa un objeto ISyncKnowledge2 con el formato 1.0 especificando una versión de serialización de SYNC_SERIALIZATION_VERSION_V1 para el método ISyncKnowledge2::SerializeWithOptions. Si el objeto contiene elementos que no se pueden serializar con el formato 1.0, se devuelve SYNC_E_INVALID_SERIALIZATION_VERSION.

Tenga en cuenta que Sync Framework 2.0 dispone de dos niveles de compatibilidad. Incluso cuando los dos proveedores utilicen Sync Framework 2.0, asegúrese de que los metadatos que usan son compatibles, que los dos componentes se utilizan en el mismo proceso o que interoperan utilizando la serialización.

En la tabla siguiente se enumeran las características de Sync Framework 2.0 que afectan al formato de los metadatos, su nivel de compatibilidad y algunos ejemplos de clases o métodos incluidos en esas características:

Característica Nivel de compatibilidad Clases o métodos de ejemplo

Filtros de unidades de cambio

WindowsSync (para código administrado) o SYNC_SERIALIZATION_VERSION_V2 (para código no administrado)

ChangeUnitListFilterInfo (para código administrado), Interfaz IChangeUnitListFilterInfo (para código no administrado)

Conflictos de restricción

SyncFrameworkVersion2 (para código administrado) o SYNC_SERIALIZATION_VERSION_V3 (para código no administrado)

RecordConstraintConflictForItem (para código administrado), ISaveChangeContext2::SetConstraintConflictOnChange (para código no administrado)

Filtros personalizados

SyncFrameworkVersion2 (para código administrado) o SYNC_SERIALIZATION_VERSION_V3 (para código no administrado)

CustomFilterInfo (para código administrado), Interfaz ICustomFilterInfo (para código no administrado)

Un objeto de conocimiento tiene un nivel mínimo de compatibilidad que se corresponde con las características de conocimiento que se usan. El nivel de compatibilidad que se utiliza para serializar un objeto de conocimiento no puede ser inferior al nivel mínimo de compatibilidad. Un objeto de conocimiento se inicializa por lo general para que tenga un nivel mínimo de compatibilidad de SyncFrameworkVersion1 (para código administrado) o SYNC_SERIALIZATION_VERSION_V1 (para código no administrado). Cuando se utiliza una características que requiera un nivel mínimo de compatibilidad más alto, el nivel mínimo se incrementa. Por ejemplo, se agrega un marcador al objeto de conocimiento para aportar compatibilidad al filtrado personalizado. El nivel mínimo de compatibilidad del objeto de conocimiento se incrementa a SyncFrameworkVersion2 (para código administrado) o SYNC_SERIALIZATION_VERSION_V3 (para código no administrado). Los intentos para serializar el objeto de conocimiento a un nivel inferior no se efectuarán correctamente, ni tampoco los intentos para utilizar el objeto de conocimiento con un proveedor diseñado para operar solamente con un nivel de compatibilidad menor.

Compatibilidad de Metadata Storage Service

Sync Framework proporciona diversos mecanismos para permitir que los componentes de diferentes versiones interoperen con los metadatos almacenados mediante Metadata Storage Service. Para obtener más información, vea Obtener acceso a los metadatos desde componentes con versiones diferentes y Actualizar la versión del almacén de metadatos.

Vea también

Conceptos

Instalación, redistribución y compatibilidad de versiones