话说微软刚出的同步框架Sync Services (转)
2008-06-20 08:56
260 查看
前言:
Sync Services For ADO.NET 这个版本的同步框架已经出来好久了,现在已经是CTP2的版本了,但它一直都是只针对桌面应用,没有针对移动设备。但3月份的时候针对移动应用的这个版本终于出来,不过现在也还仅仅是CTP版本。心急的你一定想知道它到底是何方神圣?如果您还在苦苦寻找windows mobile数据同步解决方案,那么本文可做为您的一个参考。
如果有做过Windows mobile数据同步的应该都知道微软在起初提供了两个方案供我们选择,一个是RDA,另个是Merge Replication(合并复制),它们的原理都一样,在IIS上注册一个服务器数据同步的dll,我们也叫它Server Tools服务器端数据同步提供程序,用它做为客户端与服务器数据库的中间层。但是在做移动应用开发的时候希望你能注意到移动CMWAP网关的限制,详情请见我看windows mobile数据同步方案。
庆幸地是微软推出的这个新的同步解决方案Sync Services,它能弥补RDA和Merge Replication所带来的不足,极大地解决了我们的燃眉之急。下面就为您详细地概述这个平台。您也可以在下面这个地址下载到它。
Sync Services For ADO.NET(只有454KB)
联机丛书
正文:
Microsoft Synchronization Services for ADO.NET 提供了一个直观且灵活的API,这个API提供了一组用于在数据服务和本地存储区之间的数据同步,Synchornization Services API是以ADO.NET数据访问的API为蓝本,提供了一种直观的数据服务手段。下面的摘自MSDN的几种同步技术的对比或许能更直观地看到它到底能做什么?
我想合并复制是针对数据库管理员的,Synchornization Services是针对开发人员的,因为与合并复制比起来,它必须编写更多的应用程序代码,下面的这张图是Synchornization Services的N层同步体系结构,对应的还有双层同步结构,但那只是适合使用在桌面应用程序上。一图胜万言,相信下面的这张图加上注释一定能让您对 Sync Services有个大概的框框。
一般我们使用SQL Server Compact 3.5 做为移动客户端同步数据库,它内置了对Sync Services的支持,包含了Microsoft.Synchronization.Data和 Microsoft.Synchronization.Data.SqlServerCe两个组件。因此我们就不用在CAB安装包中包含它们了。
2.服务器数据库
服务器数据库就没有什么限制了,只要能够对其使用ADO.NET的数据库都可以拿来做服务器数据库。
3.同步代理
同步代理通过以下方式驱动同步过程:
(1)循环遍历要同步的每个表;
(2)调用客户端同步提供程序以检索和应用客户端数据库的更改;
(3)调用服务器同步提供程序以检索和应用服务器数据库中的更改。
4.客户端同步提供程序
Sync Services包含了一个用于SQL Server Compact3.5数据库的提供程序,它的主要功能有:
(1)储存与客户端上支持同步的表的有关的信息;
(2)检索自上次同步以来在客户端数据库中发生的更改;
(3)将增量更改应用于客户端数据库;
(4)检测发生冲突的更改。
5.服务器同步提供程序
服务器同步提供程序与服务器通信,并将同步代理与服务器数据库的特定实现屏蔽开来,服务器同步提供程序的主要功能有:
(1)存储与服务器上支持同步的表的相关的信息;
(2)使应用程序能够检索自上次同步以来在服务器中发生的更改;
(3)将增量更改应用于服务器数据库;
(4)检测发生冲突的更改。
6.同步适配器
同步适配器就像ADO.NET的适配器一样,它为每一个客户端请求同步的表均定义一个适配器,同步适配器为服务器同步提供程序提供了与服务器数据库交互所需的特定命令,例如InsertCommand(用于将客户端新增的数据插入服务器端)。
7.代理、服务和传输
在N 层应用程序中,使用的是Microsoft.Synchronization.Data.Server.dll,但是它不驻留在客户端上(假如是两层应用程序的话,那么它才跟客户端应用程序一起),通常,DLL驻留在直接连接到服务器数据库的一个中间层上。在这种情况下,为了实现客户端和中间层之间的通信,代理和服务是必须的:
(1)在客户端上,应用程序代码引用服务器同步提供程序的一个代理(ServerSyncProviderProxy),而不是直接引用提供程序,该代理与位于中间层的服务进行通信;
(2)在中间层,该服务继承ServerSyncProvider,并公开与其相同的方法。然后,通过与服务器数据库的直接连接执行服务器同步提供程序的方法,结果通过中间层发送回客户端。
死嚼概念,未免生涩难咽,举一小例子希望能让您胃口大开。
示例:
在Sync Services中,同步代理类为SyncAgent,它的作用就如上图所示的同步代理,在这个例子中我们使用webservice做为我们的中间传输层。
public class SampleSyncAgent:SyncAgent
new SampleSyncAgent().Synchronize()
当然上面简单的调用还不行,我们还必须指定我们所需要同步的表
public void SampleSyncAgent()
1.ApplyChanges:将把同步表中的数据插入、更新和删除应用到服务器数据库。
2.GetChanges:从服务器数据存储区中选择要在客户端存储区应用的同步组中每个表的数据增量插入、更新和删除。
3.GetSchema:从服务器数据库中检索一或多个表的架构。
4.GetServerInfo:获取服务器同步信息
具体代码如下:
[WebMethod]
public SyncServerInfo GetServerInfo(SyncSession session)
[WebMethod]
public SyncSchema GetSchema(System.Collections.ObjectModel.Collection<string> tableNames,
SyncSession session)
[WebMethod]
public SyncContext GetChanges(SyncGroupMetadata groupMetadata,
SyncSession syncSession)
[WebMethod]
public SyncContext ApplyChanges(SyncGroupMetadata groupMetadata,
DataSet dataSet, SyncSession syncSession)
//Service是指webservice
public Service()
{
这里是定义同步适配器
}
这个小例子主要还是为了解释整个的Sync Service的N层体系结构,如果初次接触的兄弟也不必去深入地研究代码,只有明白了整个的体系结构才能更好地理解代码,实现或扩展它,文中的代码均为伪代码,限于文章的篇幅,未能够详细地论述如何去实现同步,数据的筛选,冲突解决机制等等,以后的随笔会详细地讲解到,个人接触这个框架的时间也不长,因此文章难免错误,欢迎大家拍砖。因为项目中已经应用到了这个框架,因此以后接触它的几率会很频繁,希望以后能在这里与大家共同讨论它的使用心得。
Sync Services For ADO.NET 这个版本的同步框架已经出来好久了,现在已经是CTP2的版本了,但它一直都是只针对桌面应用,没有针对移动设备。但3月份的时候针对移动应用的这个版本终于出来,不过现在也还仅仅是CTP版本。心急的你一定想知道它到底是何方神圣?如果您还在苦苦寻找windows mobile数据同步解决方案,那么本文可做为您的一个参考。
如果有做过Windows mobile数据同步的应该都知道微软在起初提供了两个方案供我们选择,一个是RDA,另个是Merge Replication(合并复制),它们的原理都一样,在IIS上注册一个服务器数据同步的dll,我们也叫它Server Tools服务器端数据同步提供程序,用它做为客户端与服务器数据库的中间层。但是在做移动应用开发的时候希望你能注意到移动CMWAP网关的限制,详情请见我看windows mobile数据同步方案。
庆幸地是微软推出的这个新的同步解决方案Sync Services,它能弥补RDA和Merge Replication所带来的不足,极大地解决了我们的燃眉之急。下面就为您详细地概述这个平台。您也可以在下面这个地址下载到它。
Sync Services For ADO.NET(只有454KB)
联机丛书
正文:
Microsoft Synchronization Services for ADO.NET 提供了一个直观且灵活的API,这个API提供了一组用于在数据服务和本地存储区之间的数据同步,Synchornization Services API是以ADO.NET数据访问的API为蓝本,提供了一种直观的数据服务手段。下面的摘自MSDN的几种同步技术的对比或许能更直观地看到它到底能做什么?
主要对比 | RDA | 合并复制 | Synchornization Services |
使用服务进行同步 | 否 | 否 | 是 |
支持异类数据库 | 否 | 否 | 是 |
跟踪增量更改 | 否 | 是 | 是 |
冲突检测与解决 | 否 | 是 | 是 |
在客户端轻松建立视图 | 否 | 否 | 是 |
自动初始化架构和数据 | 是 | 是 | 是 |
支持大型数据集 | 是 | 是 | 是 |
可在本地使用查询分析器 | 是 | 是 | 是 |
自动传播架构更改 | 否 | 是 | 否 |
在设备上使用 | 是 | 是 | 是 |
一般我们使用SQL Server Compact 3.5 做为移动客户端同步数据库,它内置了对Sync Services的支持,包含了Microsoft.Synchronization.Data和 Microsoft.Synchronization.Data.SqlServerCe两个组件。因此我们就不用在CAB安装包中包含它们了。
2.服务器数据库
服务器数据库就没有什么限制了,只要能够对其使用ADO.NET的数据库都可以拿来做服务器数据库。
3.同步代理
同步代理通过以下方式驱动同步过程:
(1)循环遍历要同步的每个表;
(2)调用客户端同步提供程序以检索和应用客户端数据库的更改;
(3)调用服务器同步提供程序以检索和应用服务器数据库中的更改。
4.客户端同步提供程序
Sync Services包含了一个用于SQL Server Compact3.5数据库的提供程序,它的主要功能有:
(1)储存与客户端上支持同步的表的有关的信息;
(2)检索自上次同步以来在客户端数据库中发生的更改;
(3)将增量更改应用于客户端数据库;
(4)检测发生冲突的更改。
5.服务器同步提供程序
服务器同步提供程序与服务器通信,并将同步代理与服务器数据库的特定实现屏蔽开来,服务器同步提供程序的主要功能有:
(1)存储与服务器上支持同步的表的相关的信息;
(2)使应用程序能够检索自上次同步以来在服务器中发生的更改;
(3)将增量更改应用于服务器数据库;
(4)检测发生冲突的更改。
6.同步适配器
同步适配器就像ADO.NET的适配器一样,它为每一个客户端请求同步的表均定义一个适配器,同步适配器为服务器同步提供程序提供了与服务器数据库交互所需的特定命令,例如InsertCommand(用于将客户端新增的数据插入服务器端)。
7.代理、服务和传输
在N 层应用程序中,使用的是Microsoft.Synchronization.Data.Server.dll,但是它不驻留在客户端上(假如是两层应用程序的话,那么它才跟客户端应用程序一起),通常,DLL驻留在直接连接到服务器数据库的一个中间层上。在这种情况下,为了实现客户端和中间层之间的通信,代理和服务是必须的:
(1)在客户端上,应用程序代码引用服务器同步提供程序的一个代理(ServerSyncProviderProxy),而不是直接引用提供程序,该代理与位于中间层的服务进行通信;
(2)在中间层,该服务继承ServerSyncProvider,并公开与其相同的方法。然后,通过与服务器数据库的直接连接执行服务器同步提供程序的方法,结果通过中间层发送回客户端。
死嚼概念,未免生涩难咽,举一小例子希望能让您胃口大开。
示例:
在Sync Services中,同步代理类为SyncAgent,它的作用就如上图所示的同步代理,在这个例子中我们使用webservice做为我们的中间传输层。
public class SampleSyncAgent:SyncAgent
new SampleSyncAgent().Synchronize()
当然上面简单的调用还不行,我们还必须指定我们所需要同步的表
public void SampleSyncAgent()
1.ApplyChanges:将把同步表中的数据插入、更新和删除应用到服务器数据库。
2.GetChanges:从服务器数据存储区中选择要在客户端存储区应用的同步组中每个表的数据增量插入、更新和删除。
3.GetSchema:从服务器数据库中检索一或多个表的架构。
4.GetServerInfo:获取服务器同步信息
具体代码如下:
[WebMethod]
public SyncServerInfo GetServerInfo(SyncSession session)
[WebMethod]
public SyncSchema GetSchema(System.Collections.ObjectModel.Collection<string> tableNames,
SyncSession session)
[WebMethod]
public SyncContext GetChanges(SyncGroupMetadata groupMetadata,
SyncSession syncSession)
[WebMethod]
public SyncContext ApplyChanges(SyncGroupMetadata groupMetadata,
DataSet dataSet, SyncSession syncSession)
//Service是指webservice
public Service()
{
这里是定义同步适配器
}
这个小例子主要还是为了解释整个的Sync Service的N层体系结构,如果初次接触的兄弟也不必去深入地研究代码,只有明白了整个的体系结构才能更好地理解代码,实现或扩展它,文中的代码均为伪代码,限于文章的篇幅,未能够详细地论述如何去实现同步,数据的筛选,冲突解决机制等等,以后的随笔会详细地讲解到,个人接触这个框架的时间也不长,因此文章难免错误,欢迎大家拍砖。因为项目中已经应用到了这个框架,因此以后接触它的几率会很频繁,希望以后能在这里与大家共同讨论它的使用心得。
相关文章推荐
- 无盘之夜,话说微软
- 金山WPS代言人话说微软VBA大宝贝
- 话说微软刚出的同步框架Sync Services
- Windows 系统调用.COM.微软语言引擎简单应用(C#)
- 悲剧啊,微软!
- 微软2014实习生在线测试之String reorder
- 微软:本月10日结束Windows XP sp1技术支持
- 微软企业库5发布
- 微软2014实习生及秋令营技术类职位在线测试——K-th string
- 招聘广告:微软广州 v- IW TSP
- 微软(北京).NET俱乐部活动 (2010年6月26日) – Visual Studio 2010 /*LIFE RUNS ON CODE*/
- 微软2014年实习生在线机试第二题及解法
- 远离微软
- 微软图表控件使用初探--数据绑定(交叉表)
- 微软实习生第一题
- HTTP COMPRESSION HTTP 压缩实现 (iis6)(翻译自微软知识库文章)
- 微软的软件就是臃肿
- 桌面每日一句--桌面翻译工具(有道翻译,微软翻译,Google翻译)
- HTTP调试之限制连接数量(翻译微软知识库文章)
- 微软社区精英计划 - 你会如何回答【6月26日】北京.Net学习活动QA时提出的问题