访问来自不同版本的组件的元数据
元数据存储服务在轻量级数据库中存储副本和项元数据。以特定表架构和二进制格式存储元数据,随着 Sync Framework 新版本的发布,该格式可能发生变更。此外,随着开发人员发布特定提供程序的新版本,数据库中的自定义提供程序字段可能发生变更。为了使不同版本之间具有更好的互操作性,Sync Framework 提供了一种规范文件格式和 SyncMetadataStoreSerializer 类(对于托管代码)或 ISyncMetadataStoreSerializer 接口(对于非托管代码),这些类和接口在版本之间元数据变更的合理范围内向前和向后兼容。
Sync Framework 还提供了对升级元数据存储区的支持。有关更多信息,请参见升级元数据存储区版本。
使用规范格式以便实现版本的兼容性
规范格式的一个重要优点之一是支持部分参与者副本(如设备)与提供程序的不同版本同步。请考虑以下示例:
应用程序支持某设备和各种企业办公室中众多服务器之间的同步。用户可以将设备与某服务器同步,在该设备上进行变更,然后将它与其他办公室中的服务器同步等等。
已在三个不同版本中发布了公司的联系人提供程序:1.0、2.0 和 2.5。版本 1.0 基于 Sync Framework 1.0,其他两个版本基于 Sync Framework 2.0。所有这三个版本在公司网络上都仍然可用并受支持。
Sync Framework 版本控制
如果应用程序在设备上的元数据存储服务二进制文件中存储元数据,元数据架构和格式可能与用户要同步的提供程序不兼容。以下原因可能导致这种不兼容:提供程序的版本不同并使用不同的元数据文件格式,或提供程序使用不同版本的 Sync Framework。要避免此问题,应用程序可以在每个服务器上使用二进制文件,然后在此文件和每个设备上的规范文件之间序列化和反序列化元数据。该过程如下所示:
设备的第一个同步会话完成时,应用程序通过调用 SerializeReplicaMetadata(对于托管代码)或 ISyncMetadataStoreSerializer::SerializeReplicaMetadata(对于非托管代码)将元数据序列化为设备上的规范文件。
在每个后续会话期间,应用程序执行下列操作:
调用 DeserializeReplicaMetadata(对于托管代码)或 ISyncMetadataStoreSerializer::DeserializeReplicaMetadata(对于非托管代码),以从规范文件反序列化元数据并将它应用到服务器上的二进制文件。
同步设备和服务器之间的变更。
调用 SerializeReplicaMetadata(对于托管代码)或 SerializeReplicaMetadata(对于非托管代码)将更新的元数据重新序列化到设备。
序列化和反序列化过程是高效的:对于序列化,为从元数据存储服务存储区选择元数据的查询编制索引;对于反序列化,只将对规范文件的递增变更反序列化。
提供程序版本控制
SyncMetadataStoreSerializer 类(对于托管代码)和 ISyncMetadataStoreSerializer 接口(对于非托管代码)方法通过将提供程序版本作为元数据的一部分序列化并在元数据反序列化时检查所需的提供程序版本,来支持提供程序版本控制。请考虑以下情况:
有三个版本的提供程序(v1、v2 和 v3)。
在 v2 中,已对提供程序的自定义架构做出不兼容的变更。
v2 和 v3 兼容。
如果从 v3 提供程序序列化元数据,可以为元数据中的提供程序版本指定值 v2。v2 或 v3 提供程序然后可以通过为要求的提供程序兼容性版本参数指定值 v2 来将元数据反序列化。v1 提供程序将指定值 v1,按照设计反序列化将失败,因为元数据与 v1 不兼容。一般尽可能使用最低版本,以确保与同一提供程序的以前版本最高级别的兼容性。
发布升级元数据架构的新版本提供程序时,必须注意维护与以前版本提供程序的元数据兼容性。有关更多信息,请参见升级元数据存储区版本。