Sync Framework 2.0 中的新增功能
Sync Framework 2.0 包括以下方面的新功能和增强功能:
数据库提供程序
SQL Server 和 SQL Server Compact 的新提供程序
可靠的基于内存的批处理
设置和管理 API
快照初始化
有关拓扑形状的灵活性
性能改进
文件同步提供程序
- 数据转换
自定义提供程序
简单提供程序
提供程序之间的数据转换
筛选
冲突处理
跟踪
变更应用服务
元数据存储服务序列化程序
提供程序转换器
知识的改进
兼容级别
过时的接口
数据库提供程序
Sync Framework 2.0 引入了两个新的数据库提供程序、若干重要的同步与管理相关功能以及重大的性能改进。
SQL Server 和 SQL Server Compact 的新提供程序
Sync Framework 2.0 包括两个新的数据库提供程序:
SqlCeSyncProvider 用于同步 SQL Server Compact 数据库。
此提供程序可用于与中央服务器进行同步,也可以与其他客户端进行同步(这对于 SqlCeClientSyncProvider 是不可能的)。通过此功能,开发人员可以确定新的目标方案,例如一个此类协作方案:在与中央服务器没有连接的情况下,哪些团队需要彼此进行同步。
SqlSyncProvider 用于同步 SQL Server 的任何其他版本,包括 SQL Server Express。
此提供程序可用作服务器或客户端,可大大减少同步 SQL Server 数据库时的障碍。SqlSyncProvider 可用作 DbSyncProvider,但它需要的代码少得多,并且不要求您过多了解 Sync Framework 用于同步数据的查询。DbSyncProvider 仍适合非 SQL Server 数据库。
与所有 Sync Framework 提供程序一样,这些新的提供程序可用在任何形状的拓扑中:客户端-服务器、对等以及等等。有关这两个提供程序的更多信息,请参见如何配置和执行协作同步 (SQL Server)。
可靠的基于内存的批处理
先前的 Sync Framework 和 Sync Services for ADO.NET 版本提供了一种方法供开发人员定义其自己的批处理逻辑,然后供 Sync Framework 运行时调用。这种方法的缺点包括:与将变更划分为批关联的固有复杂性;客户端与服务器之间过多的网络往返;以及无法解决资源争用问题(因为批基于同步的行数,而不基于每个批占用的内存量)。
Sync Framework 2.0 通过提供一个更完善和更可靠的批处理 API 解决了上述所有问题。开发人员不再必须自行编写批处理逻辑,因为 Sync Framework 运行时基于 API 中的若干属性将变更划分为批。现在按照内存占用量(而不是同步的行数)来定义批,这已消除了大多数常见方案的内存不足问题。有关详细信息,请参阅如何分批传递变更 (SQL Server)。
设置和管理 API
先前仅通过 Visual Studio 工具公开的设置和初始化活动现在已添加到数据库提供程序 API 中。这包括通过添加 Sync Framework 要求的变更跟踪表和触发器来设置现有数据库的功能。它还包括以空数据库开始、创建用户架构和基于已设置的其他服务器或客户端数据库设置架构的功能。有关更多信息,请参见如何配置和执行协作同步 (SQL Server)。
现在可以直接通过 API 实现如数据库备份和还原以及元数据清除等一般任务,这样,开发人员就不再需要自行实现此逻辑。有关更多信息,请参见如何备份和还原数据库 (SQL Server) 和如何清除协作同步的元数据 (SQL Server)。
快照初始化
在一个 SQL Server Compact 客户端数据库可以开始从其他数据库接收变更前,该客户端数据库必须包含表架构和所有初始数据,以及 Sync Framework 要求的变更跟踪基础结构。Sync Framework 提供两种方法来初始化该数据库:
客户端数据库的完全初始化
完全初始化适用于某些情况,但当客户端上的资源有限时,它不是理想之选。如果从头开始创建数据库架构并通过缓慢的网络连接加载所有数据,则可能导致初始同步时间过长以及内存不足错误。
通过使用预先存在的客户端数据库对客户端数据库执行快照初始化
快照初始化在 Sync Framework 2.0 中引入,旨在减少初始化客户端数据库所需的时间。在通过使用完全初始化来初始化一个客户端数据库后,可以通过使用这个第一个客户端数据库的“快照”**初始化后续数据库。快照是专门准备的 SQL Server Compact 数据库,包含表架构、数据(可选)和变更跟踪基础结构。快照初始化可以将初始同步时间降低一个数量级,并显著减少内存争用。有关更多信息,请参阅如何配置和执行协作同步 (SQL Server) 中的“设置客户端”。
有关拓扑形状的灵活性
先前的 Sync Services for ADO.NET 版本与特定的拓扑形状密切关联,在这种拓扑形状中,许多客户端通过一个中央服务器同步变更。
因为 Sync Services for ADO.NET 现在建立于 Sync Framework 之上,所以开发人员可以确定更广泛的目标方案。例如,开发人员可以支持协作方案,此类方案要求能够在客户端之间同步变更。此外,开发人员可以确定分支机构方案,其中,一系列销售点 (POS) 终端与一台分支服务器同步,而该分支服务器继而与公司中央服务器同步。
因为新的数据库提供程序建立在 Sync Framework 之上,所以,设置此阶段以支持与新的存储类型(如 Azure SQL Data Services)进行同步。
性能改进
此版本中的新数据库提供程序已在大型扩展方案中经过彻底测试,在此类方案中,单个服务器支持数以千计的客户端以及数百个并发同步操作。这一测试大大改进了内部性能,使 Sync Framework 数据库提供程序与其他 Microsoft 技术(如远程数据访问 (RDA))的执行效果相媲美,同时提供了大量与端对端解决方案(如合并复制)相当的功能。
文件同步提供程序
除了可以用于任何类型的自定义提供程序的数据转换 API 之外,Sync Framework 2.0 还提供专门用于文件同步提供程序的转换 API。有关更多信息,请参见 将文件同步提供程序与其他提供程序进行同步, IFileDataRetriever(托管代码)和 IFileDataRetriever(非托管代码)。
自定义提供程序
Sync Framework 2.0 包括对于标准自定义提供程序功能的重大改进,并引入了一种新的自定义提供程序类型:简单提供程序。
简单提供程序
简单提供程序 API 减少了开发提供程序所需的工作量。当数据源具有很少与同步相关的功能(如变更跟踪)时,更是如此。此 API 使开发人员可以编写一个提供程序,而不必成为同步专家。简单提供程序的大多数代码是与数据源交互所需的代码。有关更多信息,请参见实现简单自定义提供程序和自定义提供程序的基础知识。
托管代码中的重要新类型
有关类型的完整列表,请参见 Microsoft.Synchronization.SimpleProviders。
非托管代码中的重要新接口
有关类型的完整列表,请参见 Sync Framework 简单提供程序组件。
提供程序之间的数据转换
在一些方案中,同步提供程序同步相同类型的数据(如销售数据),但是每个提供程序所需的数据格式不同。为了解决此问题,Sync Framework 允许您实现接口,用于将数据转换为每个提供程序所需的格式。有关更多信息,请参见在提供程序间转换数据。
托管代码中的新类型和属性
非托管代码中的新接口
筛选
筛选器用于控制同步的数据。Sync Framework 2.0 新增了对控制同步哪些变更单位的筛选器的支持以及对由开发人员编写的自定义筛选器的支持。Sync Framework 2.0 还新增了提供程序协商在同步期间使用的筛选器的功能。
有关更多信息,请参见筛选同步数据。
变更单位筛选
变更单位是同步的项的一部分,如联系人项中的电话号码。不同的副本对于同一项可以有不同的表示方式,某些副本提供比其他副本更丰富和更全面的表示方式。例如,同步社区交换联系信息,并且为 name、phone number 和 address 定义变更单位。社区中的一个副本是只能存储 name 和 phone number 的移动设备。Sync Framework 通过允许提供程序指定变更单位筛选器(该筛选器指示副本只能存储数据的子集)来满足此要求。同步元数据和同步过程都得到了改进来有效处理此筛选功能。
托管代码中的新类型
非托管代码中的新接口和方法
自定义筛选器
自定义筛选器由开发人员编写,可以采用任何形式。“已筛选的副本”**只存储在筛选器中的项的项数据,如媒体存储副本只存储评价为三星或更高级别的歌曲。如果某首歌曲的评价发生变更,项可能会移入或移出筛选器。开发人员可以定义一个自定义筛选器,用于控制在已筛选的副本中存储的项数据。“筛选器跟踪副本”**是社区中的另一个副本,它可以标识筛选器中有哪些项以及最近哪些项移入或移出了筛选器。筛选器跟踪副本可能存储不在筛选器中的项的项数据。Sync Framework 通过仅发送在筛选器中的项以及有关筛选器的信息来支持从筛选器跟踪副本到已筛选的副本之间的高效同步。在将变更从已筛选的副本发送到筛选器跟踪副本时,Sync Framework 还正确计算筛选器跟踪副本的知识和其他元数据。
请注意,简单提供程序、报告约束冲突的提供程序或使用变更应用服务的提供程序无法使用自定义筛选器,否则可能出现意外结果。
托管代码中的重要新类型
提供程序实现以下类型:
Sync Framework 实现以下类型:
有关类型的完整列表,请参见 Microsoft.Synchronization。
非托管代码中的重要新接口
提供程序实现以下接口:
Sync Framework 实现以下接口:
有关接口的完整列表,请参见 Sync Framework 核心组件。
提供程序-已协商的筛选器
目标数据源只存储可用数据的子集时,如果源提供程序使用筛选器以只枚举目标可以存储的数据,这样效率更高。通过筛选器协商,目标提供程序能够指定源提供程序在变更枚举期间应使用一个或多个筛选器;源提供程序可以接受或拒绝筛选器。如果源提供程序不支持任何请求的筛选器,则目标提供程序可以选择接收所有数据并自己执行筛选。Sync Framework 相应调用提供程序来协商对筛选器的使用。
托管代码中的新类型
非托管代码中的新接口
冲突处理
Sync Framework 2.0 新增了对约束冲突、记录的冲突和实现“最后写入者入选”冲突解决方法的支持。
约束冲突
Sync Framework 2.0 增强了对“约束冲突”**的支持,这些冲突是指违反项或变更单位的约束的冲突,如文件夹的关系或文件系统中同名数据的位置。目标提供程序可以向 Sync Framework 报告约束冲突,并使用 Sync Framework 组件来解决冲突和决定如何将解决方法应用到目标副本。
请注意,使用自定义筛选器或变更应用服务的提供程序无法使用约束冲突,否则可能出现意外结果。
有关更多信息,请参见检测和解决约束冲突。
托管代码中的重要新类型和更新的类型
目标提供程序实现以下新类:
同步应用程序实现以下类中的新方法:
Sync Framework 实现以下类中的新成员:
有关类型的完整列表,请参见 Microsoft.Synchronization。
非托管代码中的重要新接口
目标提供程序实现以下新接口:
同步应用程序实现以下新接口:
Sync Framework 实现以下新接口:
有关接口的完整列表,请参见 Sync Framework 核心组件。
记录冲突
在日志中保存冲突很有用,这样可以脱离同步会话来处理冲突,例如当用户需要查看冲突并决定如何解决它们时。Sync Framework 2.0 定义一组冲突日志接口并提供帮助管理日志中的冲突的组件。Sync Framework 还为不包含冲突日志的副本提供冲突日志接口的实现。此实现在内存中运行,用于存储在处理约束冲突时可能产生的临时冲突。有关更多信息,请参见记录和管理冲突。
托管代码中的新类型
提供程序实现以下新类:
Sync Framework 实现以下新类:
非托管代码中的新接口
提供程序实现以下新类:
Sync Framework 实现以下新类:
“最后写入者入选”冲突解决方法
应用程序可能要通过保存最近做的变更而不管变更是在何处做的解决“并发冲突”**(这种冲突中项由多个副本更新)。Sync Framework 2.0 通过为应用程序提供检索在源副本上所做变更的时间以及在目标副本上所做变更的时间的机制,来支持此解决方法。应用程序然后可以比较这两个时间并指定应用最后变更的冲突解决操作。
有关详细信息,请参阅检测和解决并发冲突。
托管代码中的新类型
提供程序实现以下新接口:
非托管代码中的新接口
提供程序实现以下新接口:
跟踪
Sync Framework 允许您跟踪几个组件的执行情况,这在应用程序调试期间很有用。对于大多数 Sync Framework 组件,通过使用 Windows 事件跟踪 (ETW) 基础结构在本机代码级别执行跟踪。即使您针对 API 的托管版本进行开发,仍要使用 ETW,因为托管 API 是本机 API 上的瘦包装。有关更多信息,请参见跟踪 Sync Framework 组件。
Sync Framework 数据库提供程序提供基于 .NET Framework 实现的托管跟踪功能。有关更多信息,请参见如何跟踪同步过程。
变更应用服务
Sync Framework 包括一个变更应用方实现,大多数应用程序使用它将变更应用到副本。在版本 2.0 中,Sync Framework 引入了变更应用服务,该服务执行与变更应用方相同的操作,但是粒度更小。如果目标提供程序要求比标准变更应用方更大的灵活性,可以使用变更应用服务来只执行所需的一组操作。
请注意,报告约束冲突或使用自定义筛选器的提供程序无法使用变更应用服务,否则可能出现意外结果。
有关更多信息,请参见使用变更应用服务应用变更。
托管代码中的新类型
非托管代码中的新接口和枚举
元数据存储服务序列化程序
元数据存储服务在轻量级数据库中存储副本和项元数据。以特定表架构和二进制格式存储元数据,随着 Sync Framework 新版本的发布,该格式可能发生变更。此外,随着开发人员发布特定提供程序的新版本,数据库中的自定义提供程序字段可能发生变更。为了使不同版本之间具有更好的互操作性,Sync Framework 提供了一种规范文件格式和一组序列化接口,这些接口在版本之间元数据变更的合理范围内向前和向后兼容。有关更多信息,请参见访问来自不同版本的组件的元数据和升级元数据存储区版本。
托管代码中的新类型
非托管代码中的新接口
提供程序转换器
自定义提供程序通常从 IKnowledgeSyncProvider 派生,但它们也可以直接从 ISyncProvider 派生。但是,ISyncSession 对象用于管理同步(典型情况)时,提供程序必须从 IKnowledgeSyncProvider 派生。为了允许从 ISyncProvider 派生的提供程序参与同步会话,Sync Framework 允许您在运行时将该提供程序转换为 IKnowledgeSyncProvider。
非托管代码中的新接口和方法
知识的改进
Sync Framework 2.0 改进了知识对象,以获得更大的灵活性和更高的效率。
知识结构
Sync Framework 2.0 将知识对象的基础结构更改为更灵活、高效的格式,并定义了新接口来访问新的知识元素。为保持向后兼容性,新知识对象还模拟 Sync Framework 1.0 知识方法的输出。
托管代码中的新类型和更新的类型
非托管代码中的新接口和枚举
知识 Cookie
Sync Framework 2.0 新增了知识 Cookie,知识 Cookie 是知识的轻型只读表示形式,可用于在性能特别重要时进行快速比较。
托管代码中的新类型和成员
非托管代码中的新枚举和方法
兼容级别
Sync Framework 包括元数据的兼容级别,以便不同版本的组件可以继续正确互操作。有关更多信息,请参见Sync Framework 向后兼容性和互操作性。
托管代码中的新类型和成员
ChangeBatchBase 和派生类的 CompatibilityLevel 属性。
SyncKnowledge 和派生类的 CompatibilityLevel 属性。
非托管代码中的新枚举和方法
过时的接口
下面的接口已过时,不应用在新开发中。它们在 Sync Framework 2.0 中继续正常发挥作用,但在后续版本中可能被删除。
非托管代码中的过时接口
请参阅
概念
Microsoft Sync Framework
使用 Sync Framework 的好处
选择适当的 Sync Framework 组件