微软同步框架Sync Services2008-5-7 12:10:14
前言:
我想合并复制是针对数据库管理员的,Synchornization Services是针对开发人员的,因为与合并复制比起来,它必须编写更多的应用程序代码,下面的这张图是Synchornization Services的N层同步体系结构,对应的还有双层同步结构,但那只是适合使用在桌面应用程序上。一图胜万言,相信下面的这张图加上注释一定能让您对 Sync Services有个大概的框框。 ![]() 概念解释: 1.客户端数据库: 一般我们使用SQL Server Compact 3.5 做为移动客户端同步数据库,它内置了对Sync Services的支持,包含了Microsoft.Synchronization.Data和 Microsoft.Synchronization.Data.SqlServerCe两个组件。因此我们就不用在CAB安装包中包含它们了。
服务器数据库就没有什么限制了,只要能够对其使用ADO.NET的数据库都可以拿来做服务器数据库。
同步代理通过以下方式驱动同步过程: (1)循环遍历要同步的每个表; (2)调用客户端同步提供程序以检索和应用客户端数据库的更改; (3)调用服务器同步提供程序以检索和应用服务器数据库中的更改。
Sync Services包含了一个用于SQL Server Compact3.5数据库的提供程序,它的主要功能有: (1)储存与客户端上支持同步的表的有关的信息; (2)检索自上次同步以来在客户端数据库中发生的更改; (3)将增量更改应用于客户端数据库; (4)检测发生冲突的更改。
服务器同步提供程序与服务器通信,并将同步代理与服务器数据库的特定实现屏蔽开来,服务器同步提供程序的主要功能有: (1)存储与服务器上支持同步的表的相关的信息; (2)使应用程序能够检索自上次同步以来在服务器中发生的更改; (3)将增量更改应用于服务器数据库; (4)检测发生冲突的更改。
同步适配器就像ADO.NET的适配器一样,它为每一个客户端请求同步的表均定义一个适配器,同步适配器为服务器同步提供程序提供了与服务器数据库交互所需的特定命令,例如InsertCommand(用于将客户端新增的数据插入服务器端)。
在N 层应用程序中,使用的是Microsoft.Synchronization.Data.Server.dll,但是它不驻留在客户端上(假如是两层应用程序的话,那么它才跟客户端应用程序一起),通常,DLL驻留在直接连接到服务器数据库的一个中间层上。在这种情况下,为了实现客户端和中间层之间的通信,代理和服务是必须的: (1)在客户端上,应用程序代码引用服务器同步提供程序的一个代理(ServerSyncProviderProxy),而不是直接引用提供程序,该代理与位于中间层的服务进行通信; (2)在中间层,该服务继承ServerSyncProvider,并公开与其相同的方法。然后,通过与服务器数据库的直接连接执行服务器同步提供程序的方法,结果通过中间层发送回客户端。
public class SampleSyncAgent:SyncAgent![]() { public void SampleSyncAgent()![]() { //定义客户端同步提供程序 this.LocalProvider= new SqlCeClientSyncProvider(连接客户端数据库的连接字符串); //定义服务器端同步提供程序 this.RemoteProvider=new ServerSyncProviderProxy(webservice); } }
new SampleSyncAgent().Synchronize()
public void SampleSyncAgent()![]() { //定义客户端同步提供程序 this.LocalProvider= new SqlCeClientSyncProvider(连接客户端数据库的连接字符串); //定义服务器端同步提供程序 this.RemoteProvider=new ServerSyncProviderProxy(webservice); //注意哦,表名必须与服务器同步提供程序指定的表名一致,区分大小写 SyncTable MySyncTable=new SyncTable("表名") //设置表的创建方式,这里为不存在的话就创建,已存在的话就上传已存在的表里的所有行 MySyncTable.CreationOption=TableCreationOption.UploadExistingOrCreateNewTable; //设置表的同步方式,这里为只下载 MySyncTable.SyncDirection=SyncDirection.DownloadOnly; this.Configuration.SyncTables.Add(MySyncTable); } 1.ApplyChanges:将把同步表中的数据插入、更新和删除应用到服务器数据库。 2.GetChanges:从服务器数据存储区中选择要在客户端存储区应用的同步组中每个表的数据增量插入、更新和删除。 3.GetSchema:从服务器数据库中检索一或多个表的架构。 4.GetServerInfo:获取服务器同步信息
[WebMethod] public SyncServerInfo GetServerInfo(SyncSession session)![]() { SyncServerInfo si; try![]() {![]() si = _serverSyncProvider.GetServerInfo(session); } catch (Exception ex)![]() { throw; }![]() return si; }![]() [WebMethod] public SyncSchema GetSchema(System.Collections.ObjectModel.Collection<string> tableNames, SyncSession session)![]() { SyncSchema ss = null;![]() try![]() { ss = _serverSyncProvider.GetSchema(tableNames, session); } catch (Exception ex)![]() { throw; }![]() return ss; }![]() [WebMethod] public SyncContext GetChanges(SyncGroupMetadata groupMetadata, SyncSession syncSession)![]() { SyncContext context = null; try![]() {![]() context = _serverSyncProvider.GetChanges(groupMetadata, syncSession); } catch (Exception e)![]() { throw; }![]() return context; }![]() [WebMethod] public SyncContext ApplyChanges(SyncGroupMetadata groupMetadata, DataSet dataSet, SyncSession syncSession)![]() { SyncContext sc = null; try![]() { sc = _serverSyncProvider.ApplyChanges(groupMetadata, dataSet, syncSession); } catch (Exception e)![]() { throw; }![]() return sc; }
//Service是指webservice public Service()![]() { 这里是定义同步适配器 }
|
||||||||||||||||||||||||||||||||||||||||||||||






}
}
网友:阿兵
网友:灵猴