
























Sync Services for ADO.NET 能够实现 SQL Server Compact 3.5 SP1 客户端数据库与服务器数据库或任何其他数据源之间的同步,如以 XML 形式提供股票报价的服务。在同步两个数据库方面,Sync Services 支持使用为之提供了 ADO.NET 提供程序的任何服务器数据库的双层和 N 层体系结构。在对客户端数据库和其他类型的数据源进行同步方面,Sync Services 支持基于服务的体系结构。与双层或 N 层体系结构相比,此体系结构需要编写更多的应用程序代码;但是,它不需要开发人员采取另一种不同的方式进行同步。
下面这些图展示了双层、N 层和基于服务的体系结构所涉及的组件。每个图展示的都是一个客户端,但是经常会有多个客户端与单个服务器进行同步。Sync Services 使用中心辐射式模型。同步操作总是由客户端发起。来自每个客户端的所有变更首先与服务器进行同步,然后再从服务器发送到其他客户端。(这些客户端彼此之间并不直接交换变更。)
Sync Services 提供了快照同步、仅下载同步、仅上载同步和双向同步:
快照同步和仅下载同步通常用于存储和更新客户端上的参考数据,例如产品列表。在服务器上所做的数据变更在同步期间将会下载到客户端数据库中。快照同步则在每次同步客户端时完全刷新数据。如果不希望跟踪增量变更或服务器不能执行此操作,则这是一种适宜的方法。仅限下载同步只下载自上次同步以来发生的增量变更。
仅上载同步通常用于在客户端上插入数据,例如销售订单。在客户端数据库中执行的插入操作和对数据的其他变更在同步期间将会上载到服务器中。
双向同步通常用于在客户端和服务器上都会进行更新的数据(如客户联系信息)。在同步期间,必须对所有发生冲突的变更进行处理。
有关同步类型的更多信息,请参见如何指定快照同步、下载同步、上载同步和双向同步。客户端和服务器同步的 Sync Services 体系结构是不对称的:也就是说客户端数据库中内置了变更跟踪功能,但是如果希望能够下载增量变更,则必须对服务器数据存储区中的变更进行跟踪。有关变更跟踪的更多信息,请参见跟踪服务器数据库中的变更。
体系结构图中的组件包括客户端和服务器数据库以及 Sync Services API 中的一组类。N 层体系结构和基于服务的体系结构还包括您必须编写的 Web 服务和传输组件。
第一张图显示了一个双层体系结构,它具有一个客户端数据库和一个服务器数据库。
.gif)
除了这两个数据库之外,图中的所有项目都对应于 Sync Services 类。这些类包含在以下 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 3.5 SP1 中的System.Data.SqlServerCe.dll。对于双层应用程序,所有 Sync Services DLL 都驻留在客户端上。对于 N 层应用程序,Microsoft.Synchronization.Data.dll 和 Microsoft.Synchronization.Data.Server.dll 驻留在提供同步服务的一台单独的计算机上。
第二张图显示的是一个 N 层体系结构。这需要一个代理服务器、一个服务以及一个传输机制来实现客户端数据库和服务器数据库之间的通信。这种体系结构比双层体系结构更为常见,因为 N 层体系结构不需要在客户端数据库和服务器数据库之间建立直接连接。
第三张图显示的是一个基于服务的体系结构。这种体系结构包括一个客户端数据库,但是不包括服务器数据库或对应的服务器同步提供程序和同步适配器。若要使用这种体系结构,应用程序必须能够通过自定义代理和自定义服务与同步代理进行通信。它们提供的功能必须与服务器同步提供程序和同步适配器通常提供的功能相同,例如检索要同步的变更。
用于 Sync Services 应用程序的客户端数据库使用 SQL Server Compact 3.5 SP1 Service Pack 1 (SP1) 和更高版本。Sync Services 为跟踪客户端数据库中的增量变更提供了一个基础结构。通过使用一种与快照同步不同的方法,此基础结构在任何表进行首次同步时启用。默认情况下,客户端数据库中 Sync Services 所需的元数据将存储 10 天。有关元数据保持期的更多信息,请参见 RetentionInDays。
服务器数据库可以是能够对其使用 ADO.NET 提供程序的任何数据库。如果希望跟踪服务器数据库中的增量变更,必须准备该数据库以实现这一目的。有关更多信息,请参见跟踪服务器数据库中的变更。
上图中展示了以下类:SyncAgent、SqlCeClientSyncProvider、DbServerSyncProvider、SyncTable、SyncGroup 和 SyncAdapter。有关如何在应用程序中使用这些类的示例,请参见入门:客户端与服务器同步。
同步代理通过以下方式驱动同步过程:
循环遍历要同步的每个表。
调用客户端同步提供程序以检索和应用客户端数据库中的变更。
调用服务器同步提供程序以检索和应用服务器数据库中的变更。
此外,同步代理还维护同步操作的会话级别信息,并向客户端上的应用程序提供成功消息、错误和统计信息。有关更多信息,请参见 SyncAgent 和如何指定快照同步、下载同步、上载同步和双向同步。
客户端同步提供程序与客户端通信并将同步代理与客户端数据库的特定实现屏蔽开来。Sync Services 包括一个用于 SQL Server Compact 3.5 SP1 数据库的提供程序。客户端同步提供程序的主要活动如下所示:
存储与客户端上支持同步的表有关的信息。
检索自上次同步以来在客户端数据库中发生的变更。
将增量变更应用于客户端数据库。
检测发生冲突的变更。
有关更多信息,请参见 SqlCeClientSyncProvider 和如何指定快照同步、下载同步、上载同步和双向同步。
同步表是为每个进行同步的表定义的。它可以存储设置,例如同步方向。每个客户端可以只请求它需要的表。这可能不包括服务器同步提供程序能够提供的所有表。例如,可能有 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),而不是直接参考提供程序。该代理与位于中间层的服务进行通信。
在中间层,该服务继承 ServerSyncProvider(DbServerSyncProvider 从中继承的抽象类)并公开与其相同的方法。然后,通过与服务器数据库的直接连接执行服务器同步提供程序的方法。结果通过中间层发送回客户端。
有关更多信息,请参见如何配置 N 层同步。
在基于服务的应用程序中,Microsoft.Synchronization.Data.Server.dll 不在客户端上使用。应用程序代码提供的功能必须与服务器同步提供程序和同步适配器通常提供的功能相同:
在客户端上,应用程序代码为处理服务器同步提供程序任务(例如从数据源检索变更)的应用程序代码参考一个代理。该代理与位于中间层的服务进行通信。
在中间层,该服务继承 ServerSyncProvider(DbServerSyncProvider 从中继承的抽象类)并公开与其相同的方法。然后,应用程序代码通过与服务器数据库的直接连接执行这些方法。结果通过中间层发送回客户端。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。