前言:

     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
使用服务进行同步
支持异类数据库
跟踪增量更改
冲突检测与解决
在客户端轻松建立视图
自动初始化架构和数据
支持大型数据集
可在本地使用查询分析器
自动传播架构更改
在设备上使用

我想合并复制是针对数据库管理员的,Synchornization Services是针对开发人员的,因为与合并复制比起来,它必须编写更多的应用程序代码,下面的这张图是Synchornization Services的N层同步体系结构,对应的还有双层同步结构,但那只是适合使用在桌面应用程序上。一图胜万言,相信下面的这张图加上注释一定能让您对 Sync Services有个大概的框框。


概念解释:

1.客户端数据库:

    一般我们使用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
{
    public void SampleSyncAgent()
    {
        //定义客户端同步提供程序
        this.LocalProvider= new SqlCeClientSyncProvider(连接客户端数据库的连接字符串);
        //定义服务器端同步提供程序
        this.RemoteProvider=new ServerSyncProviderProxy(webservice);
    }
}

SampleClientSyncProvider就是我们图中所示的客户端同步提供程序,ServerSyncProviderProxy是服务器同步提供程序的一个代理,如图中所示,假如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);
    }

这样的话我们就指定了一张客户端需同步的表,服务器同步提供程序要做什么呢,简单地说webservice必须实现四个方法才可以正常地去同步客户端与服务器端的数据。

1.ApplyChanges:将把同步表中的数据插入、更新和删除应用到服务器数据库。
2.GetChanges:从服务器数据存储区中选择要在客户端存储区应用的同步组中每个表的数据增量插入、更新和删除。
3.GetSchema:从服务器数据库中检索一或多个表的架构。
4.GetServerInfo:获取服务器同步信息

具体代码如下:

method
 [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;
        }

最后我们只需提供在webservice 中实现同步适配器就可以与我们的客户端进行同步交互了。

      //Service是指webservice
        public Service()
        {
             这里是定义同步适配器
        }

这个小例子主要还是为了解释整个的Sync Service的N层体系结构,如果初次接触的兄弟也不必去深入地研究代码,只有明白了整个的体系结构才能更好地理解代码,实现或扩展它,文中的代码均为伪代码,限于文章的篇幅,未能够详细地论述如何去实现同步,数据的筛选,冲突解决机制等等,以后的随笔会详细地讲解到,个人接触这个框架的时间也不长,因此文章难免错误,欢迎大家拍砖。因为项目中已经应用到了这个框架,因此以后接触它的几率会很频繁,希望以后能在这里与大家共同讨论它的使用心得。

转载于:https://www.cnblogs.com/JustDI/archive/2008/05/07/1184085.html

话说微软刚出的同步框架Sync Services相关推荐

  1. Microsoft Sync Framework 系列(三):微软同步框架出现背景及要解决的问题

    持续连接的C\S,B\S系统存在固有的缺陷,偶尔连接系统(OCA)在试图解决这些问题的同时又引入了新的问题.开发offline系统存在很多挑战,这些挑战都是 Microsoft Sync Framew ...

  2. 微软同步框架入门开篇(附SnapShot快照Demo)

    在Teched2008上听了一节关于MSF(Microsoft Sync Framework 微软同步框架),这一框架允许 开发者创建离线式的应用.设备和服务,可以与任何应用的任意类型数据进行集成. ...

  3. 微软同步框架入门之五--使用WCF同步远程数据

    在之前介绍的两个DEMO中,链接远程服务器所使用的方式都是通过数据库链接串.虽然可以简单的实现所期望的数据同步功能,但这样做有两个问题: 1.不适合进行分布式布署.          2.安全方面存在 ...

  4. 微软同步框架入门之四--冲突(Conflict)检测和处理

    检测和处理微软同步框架(MSF)入门之四--冲突(Conflict)检测和处理     在几篇文章当中,我介绍了 SnapShot(快照方式)和"只同步新更改和增量更改"这两种同步 ...

  5. java.util.concurrent同步框架(AQS论文中文翻译)

    java.util.concurrent同步框架 摘要 目录和主题描述 一般条款 关键字 1.介绍: 需求 设计实现 4.使用方式 5.性能 6.结论 7. 致谢 Doug Lea SUNY Oswe ...

  6. 1.Java集合框架是什么?说出一些集合框架的优点?

    1.Java集合框架是什么?说出一些集合框架的优点? 干货太重,且文字比较多.需要花费时间与耐心细细咀嚼,但是真的能收获到很多. 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector ...

  7. 微软二合一能装python吗_微软再出神器,这次终于对Python下手了!

    ​微软又出良心工具了! 微软于7月1日发布一款新的VS Code插件,名为Pylance,这个名称是向Monty Python的Lancelot致敬. Pylance距离截稿不足2天时间,VS Cod ...

  8. 学习SharePoint记录,微软给出的的Application Templates很有帮助呢

    微软给出了很多Application Templates,其中包括的Site Template和Site Definition都有: http://technet.microsoft.com/en-u ...

  9. python卸载_微软再出神器,这次终于对Python下手了!

    ​微软又出良心工具了! 微软于7月1日发布一款新的VS Code插件,名为Pylance,这个名称是向Monty Python的Lancelot致敬. Pylance距离截稿不足2天时间,VS Cod ...

最新文章

  1. python的QT5:如何用QT5实现菜单
  2. java csrf_java使用jsp servlet来防止csrf 攻击的实现方法
  3. Ubuntu20.04 编译运行apue.3e 避坑指南
  4. 前端学习(3059):vue+element今日头条管理-优化文章状态
  5. Linux 下清空或删除大文件内容的 5 种方法
  6. 前端开发者必备的20个文档和在线工具
  7. u3d外部资源加载加密
  8. 【Flink】Flink kafka Spark 如何实现数据有序性
  9. Lucene.Net.Search.Highlight.FragmentQueue 中的派生方法 LessThan 不能减少访问
  10. 发票上的计算机字体,发票代码和发票号码是什么字体
  11. 传输线应用基础,阻抗匹配与谐波控制
  12. 蜜罐 计算机术语,检测虚机和蜜罐方法的概念 -电脑资料
  13. EasyClick 易点云测自动化测试入门到精通
  14. Sampling Hair Density Field by Deterministic Importance Sampling
  15. 编译原理复习总结及思维导图
  16. windows10强制删除文件_Windows10中恶意软件删除
  17. 针对云主机卡死问题的定位分析方法
  18. JS中的函数声明和函数表达式
  19. 农场主问题-鸡兔同笼问题---分析与解决--Python
  20. Springboot毕设项目博物馆参观预约管理系统gkb2s(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. RabbitMQ——消息发布订阅
  2. 从淘宝来看后端架构发展
  3. python文件命名的错误
  4. 极速理解设计模式系列:4.原型模式(Prototype Pattern)
  5. Maven入门学习,安装及创建项目
  6. jQuery自动加载更多程序
  7. C语言程序设计,第四版 ,谭浩强。绝对原版,最新的资料
  8. SpringBoot项目请求路径中有正反斜杠的处理办法
  9. DCL双检查锁机制实现线程安全的单例设计模式
  10. java生成图片url_Java Springboot如何基于图片生成下载链接