用于客户端与服务器同步的体系结构和类

Sync Framework 能够实现 SQL Server Compact 客户端数据库与服务器数据库或任何其他数据源之间的同步,如以 XML 形式提供股票报价的服务。在同步两个数据库方面,Sync Framework 支持使用为之提供了 ADO.NET 提供程序的任何服务器数据库的双层和 N 层体系结构。在对客户端数据库和其他类型的数据源进行同步方面,Sync Framework 支持基于服务的体系结构。与双层或 N 层体系结构相比,此体系结构需要编写更多的应用程序代码;但是,它不需要开发人员采取另一种不同的方式进行同步。

下面这些图展示了双层、N 层和基于服务的体系结构所涉及的组件。每个图展示的都是一个客户端,但是经常会有多个客户端与单个服务器进行同步。Sync Framework 将中心辐射式模型用于客户端和服务器数据库同步。同步操作总是由客户端发起。来自每个客户端的所有变更首先与服务器进行同步,然后再从服务器发送到其他客户端。(这些客户端彼此之间并不直接交换变更。)

Sync Framework 为客户端和服务器方案提供了快照同步、仅下载同步、仅上载同步和双向同步:

  • 快照同步和仅下载同步通常用于存储和更新客户端上的参考数据,例如产品列表。在服务器上所做的数据变更在同步期间将会下载到客户端数据库中。快照同步则在每次同步客户端时完全刷新数据。如果不希望跟踪增量变更或服务器不能执行此操作,则这是一种适宜的方法。仅限下载同步只下载自上次同步以来发生的增量变更。

  • 仅上载同步通常用于在客户端上插入数据,例如销售订单。在客户端数据库中执行的插入操作和对数据的其他变更在同步期间将会上载到服务器中。

  • 双向同步通常用于在客户端和服务器上都会进行更新的数据(如客户联系信息)。在同步期间,必须对所有发生冲突的变更进行处理。

有关同步类型的更多信息,请参见如何指定快照同步、下载同步、上载同步和双向同步。客户端和服务器同步的 Sync Framework 体系结构是不对称的:也就是说客户端数据库中内置了变更跟踪功能,但是如果希望能够下载增量变更,则必须对服务器数据存储区中的变更进行跟踪。有关变更跟踪的更多信息,请参见跟踪服务器数据库中的变更

体系结构图中的组件

体系结构图中的组件包括客户端和服务器数据库以及 Sync Framework 数据库同步 API 中的一组类。N 层体系结构和基于服务的体系结构还包括您必须编写的 Web 服务和传输组件。

双层体系结构

第一张图显示了一个双层体系结构,它具有一个客户端数据库和一个服务器数据库。

两层同步拓扑

除了这两个数据库之外,图中的所有项目都对应于 Sync Framework 类。这些类包含在以下 DLL 中:

  • Microsoft.Synchronization.Data.dll 包含同步代理、同步表和同步组。

  • Microsoft.Synchronization.Data.SqlServerCe.dll 包含客户端同步提供程序。

  • Microsoft.Synchronization.Data.Server.dll 包含服务器同步提供程序和同步适配器。

所有 DLL 都依赖于 .NET Framework 2.0 或更高版本中的 System.dll 和 System.Data.dll。Microsoft.Synchronization.Data.SqlServerCe.dll 还依赖于 SQL Server Compact 中的 System.Data.SqlServerCe.dll。对于双层应用程序,所有 Sync Framework DLL 都驻留在客户端上。对于 N 层应用程序,Microsoft.Synchronization.Data.dll 和 Microsoft.Synchronization.Data.Server.dll 驻留在提供同步服务的一台单独的计算机上。

N 层体系结构

第二张图显示的是一个 N 层体系结构。这需要一个代理服务器、一个服务以及一个传输机制来实现客户端数据库和服务器数据库之间的通信。这种体系结构比双层体系结构更为常见,因为 N 层体系结构不需要在客户端数据库和服务器数据库之间建立直接连接。

N 层同步拓扑

基于服务的体系结构

第三张图显示的是一个基于服务的体系结构。这种体系结构包括一个客户端数据库,但是不包括服务器数据库或对应的服务器同步提供程序和同步适配器。若要使用这种体系结构,应用程序必须能够通过自定义代理和自定义服务与同步代理进行通信。它们提供的功能必须与服务器同步提供程序和同步适配器通常提供的功能相同,例如检索要同步的变更。

基于服务的同步拓扑

客户端数据库

用于 Sync Framework 应用程序的客户端数据库使用 SQL Server Compact 3.5 SP1 和更高版本(包括 64 位版本的 SQL Server Compact)。Sync Framework 为跟踪客户端数据库中的增量变更提供了一个基础结构。通过使用一种与快照同步不同的方法,此基础结构在任何表进行首次同步时启用。默认情况下,客户端数据库中 Sync Framework 所需的元数据将存储 10 天。有关元数据保持期的更多信息,请参见 RetentionInDays

服务器数据库

服务器数据库可以是能够对其使用 ADO.NET 提供程序的任何数据库。如果希望跟踪服务器数据库中的增量变更,必须准备该数据库以实现这一目的。有关更多信息,请参见跟踪服务器数据库中的变更

Sync Framework 类

上图中展示了以下类:SyncAgentSqlCeClientSyncProviderDbServerSyncProviderSyncTableSyncGroupSyncAdapter。有关如何在应用程序中使用这些类的示例,请参见入门:客户端与服务器同步

同步代理

同步代理通过以下方式驱动同步过程:

  • 循环遍历要同步的每个表。

  • 调用客户端同步提供程序以检索和应用客户端数据库中的变更。

  • 调用服务器同步提供程序以检索和应用服务器数据库中的变更。

此外,同步代理还维护同步操作的会话级别信息,并向客户端上的应用程序提供成功消息、错误和统计信息。有关更多信息,请参见 SyncAgent如何指定快照同步、下载同步、上载同步和双向同步

客户端同步提供程序

客户端同步提供程序与客户端通信并将同步代理与客户端数据库的特定实现屏蔽开来。Sync Framework 包括一个用于 SQL Server Compact 数据库的提供程序。客户端同步提供程序的主要活动如下所示:

  • 存储与客户端上支持同步的表有关的信息。

  • 检索自上次同步以来在客户端数据库中发生的变更。

  • 将增量变更应用于客户端数据库。

  • 检测发生冲突的变更。

有关更多信息,请参见 SqlCeClientSyncProvider如何指定快照同步、下载同步、上载同步和双向同步

服务器同步提供程序

服务器同步提供程序与服务器通信并将同步代理与服务器数据库的特定实现屏蔽开来。服务器同步提供程序的主要活动如下所示:

  • 存储与服务器上支持同步的表有关的信息。

  • 使应用程序能够检索自上次同步以来在服务器数据库中发生的变更。

  • 将增量变更应用于服务器数据库。

  • 检测发生冲突的变更。

有关更多信息,请参见 DbServerSyncProvider如何指定快照同步、下载同步、上载同步和双向同步

同步表和同步组

同步表是为每个进行同步的表定义的。它可以存储设置,例如同步方向。每个客户端可以只请求它需要的表。这可能不包括服务器同步提供程序能够提供的所有表。例如,可能有 20 个表,其中的 10 个表在服务器同步提供程序中配置为双向同步。客户端可能只请求以仅下载的方式同步其中的 12 个表。虽然服务器支持上载,但是客户端不必执行变更或同步所有表。有关更多信息,请参见 SyncTable

在定义了同步表之后,可以将其添加到同步组中。同步组是一种确保在一组表中一致地应用变更的机制。如果表包括在同步组中,则对这些表的变更将作为一个单元进行传送,而且会在一个事务中作为一个单元应用到服务器上。如果组中进行的任何变更失败,则对整个组的变更都会在下一次同步时进行重试。有关更多信息,请参见 SyncGroup如何指定快照同步、下载同步、上载同步和双向同步

同步适配器

同步适配器模仿 ADO.NET 中的数据适配器,并为进行同步的每个表定义同步适配器。同步适配器为服务器同步提供程序提供了与服务器数据库交互所需的特定命令,例如 InsertCommand,此命令可从客户端数据库向服务器数据库应用插入。由于同步适配器使用 ADO.NET DbCommand 对象,因此可以使用 ADO.NET 支持的任意命令结构。这包括内联 Transact-SQL、存储过程、视图、函数等。这些命令只需要定义了要传输和应用的结构和数据的单个结果。有关更多信息,请参见 SyncAdapter如何指定快照同步、下载同步、上载同步和双向同步

代理、服务和传输

“代理”、“服务”和“传输”用在 N 层体系结构和基于服务的体系结构中。在 N 层应用程序中,使用的是 Microsoft.Synchronization.Data.Server.dll,但是它不驻留在客户端上。通常,DLL 驻留在直接连接到服务器数据库的一个中间层上。在这种情况下,为了实现客户端和中间层之间的通信,代理和服务是必需的:

  • 在客户端上,应用程序代码参考服务器同步提供程序的一个代理 (ServerSyncProviderProxy),而不是直接参考提供程序。该代理与位于中间层的服务进行通信。

  • 在中间层,该服务继承 ServerSyncProviderDbServerSyncProvider 从中继承的抽象类)并公开与其相同的方法。然后,通过与服务器数据库的直接连接执行服务器同步提供程序的方法。结果通过中间层发送回客户端。

有关更多信息,请参见如何配置 N 层同步

在基于服务的应用程序中,Microsoft.Synchronization.Data.Server.dll 不在客户端上使用。应用程序代码提供的功能必须与服务器同步提供程序和同步适配器通常提供的功能相同:

  • 在客户端上,应用程序代码为处理服务器同步提供程序任务(例如从数据源检索变更)的应用程序代码参考一个代理。该代理与位于中间层的服务进行通信。

  • 在中间层,该服务继承 ServerSyncProviderDbServerSyncProvider 从中继承的抽象类)并公开与其相同的方法。然后,应用程序代码通过与服务器数据库的直接连接执行这些方法。结果通过中间层发送回客户端。

API 中的其他类

本主题中的图展示了 API 中主要的类。但是,还有许多类没有在图中展示出来。若要获取有关所有可用类的信息,请参见 Microsoft.SynchronizationMicrosoft.Synchronization.DataMicrosoft.Synchronization.Data.SqlServerCeMicrosoft.Synchronization.Data.Server。以下部分介绍了您应该熟悉的其他四个重要的类。

同步定位点

同步定位点是从服务器同步的一组表的一个时间参考点。通过同步定位点,应用程序可以确定在指定会话中应该对哪些变更进行同步。在同步过程中,客户端同步提供程序会在客户端数据库中存储以下参考点:

  • 上一次接收的定位点
    标识从服务器中下载的最后变更。
  • 上一次发送的定位点
    标识从客户端上载的最后变更。

在下一次同步时,应用程序可使用这些定位点标识同步下一组变更的起点。有关更多信息,请参见 SyncAnchor跟踪服务器数据库中的变更

同步会话统计信息

会话统计信息是同步代理为每个同步会话提供的一组统计信息。统计信息包括与同步时间、所处理的变更数量以及所发生的任何冲突或异常有关的信息。有关更多信息,请参见 SyncStatistics如何处理事件和对业务逻辑进行编程

同步会话变量

会话变量是一些为开发人员提供的变量,用作在服务器上执行的选择、插入、更新和删除命令的参数。可以通过多种方式使用这些变量:为冲突检测提供支持以及避免将变更多次下载到同一客户端。有关更多信息,请参见 SyncSession如何使用会话变量

SQL Server 同步适配器生成器

同步适配器生成器模仿 ADO.NET 中的命令生成器,可帮助您开发由服务器同步提供程序执行的同步命令的代码。同步适配器生成器可为 SQL Server 数据库生成 SELECT、INSERT、UPDATE 和 DELETE 语句。这些语句是根据您提供的与同步操作所涉及的表有关的信息建立的。有关更多信息,请参见 SqlSyncAdapterBuilder有助于开发应用程序的工具

请参阅

概念

脱机方案
入门:客户端与服务器同步