【引自FLYabroad的博客】Microsoft Sync Framework(MSF)为我们提供了进行同步应用开发的基础框架和 API,这些 API 即有基于托管代码的,也有基于非托管代码的,也就是说我们既可以开发基于.NET平台使用托管 API 的同步应用,也可以开发基于WIN32平台非托管 API 的同步应用。
MSF 只是一个框架,一个软件的半成品,它可以提供一些同步应用的通用基础功能,但是它没有办法知道我们要同步那里的数据,是单向、双向还是多向,冲突如何解决等问题,也没有办法了解我们业务系统的逻辑,所以我们的任务是使用 MSF 提供的基础来开发自定义的同步系统来满足我们自身系统同步的需要。
使用 MSF 同步数据存储(replica)需要三个基本组件:synchronization session(同步会话,在本系列中简称 session)和两个 synchronization provider(同步提供者,在本系列中简称 provider)。
同步时应用程序创建 session 并且传入相应的 source provider 和 destination provider 来初始化同步。同步过程中 session 使用 source provider 来获取 source replica 的变化,并将变化通过 destination provider 应用到 destination replica 。创建自定义的同步 provider 是使用 MSF 的核心。
provider 的职责:
1. 管理 replica 的 metadata 和 knowledge,同时还有每一个要被同步的 item 的 metadata 。
2. 传输实际的 item 数据:从自己的 data store 中传出或者将其他 data store 的数据传入。
3. 使用 Sync Framework 中的 API 来 enumerate change (作为 source)或者 detect conflicts,apply changes (作为 destination)。
provider 是 MSF 框架的核心,主要的功能是管理元数据,Sync Framework 提供托管和非托管的 API 来帮助我们开发 Provider,这个以后实例中会讲到
同步算法
单向同步(one-way synchronaztion)
1. session 取得 destination replica 的 knowledge 并发送给 source provider 。
2. source provider 利用 destination 的 knowledge 找出需要发送到 destination 的更改。
3. source provider 将刚刚枚举出的更改传递给 session 。
4. session 利用 destination provider 来检测冲突并将源发送过来的变化(change)应用到 destination replica 。
两个 replica 之间的双向同步(Two-way synchronization)可以通过两次单向同步完成。
与一个计算机连接的 N 个 replicas 之间的多路同步(N-way synchronization)执行过程:
1. 所有 replica 通过 one-way synchronization 方式将自身数据同步到中心复本(central replica)。
2. 所有冲突在中心复本(central replica)上处理。
3. 所有 replica 通过 one-way synchronization 方式从中心复本(central replica)同步到本地。
就像上两篇文章所讲,provider 要想枚举更改或者检测冲突必须要管理元数据,provider 可以自己来进行管理,但更好的办法是通过专门的 Metadata Management 组件,后面我们会降到。
微软提供的 SyncToy 就是利用 MSF 开发的用于同步文件的工具,大家可以参考。
http://forums.microsoft.com/sync/ShowForum.aspx?ForumID=2026&SiteID=75
相关专题
- 告别ASP.NET操作EXCEL的烦恼 (241次浏览)
- C#正则表达式快速入门 (166次浏览)
- VS 2008新特性与新功能介绍 (164次浏览)
- Asp.net程序中生成Excel报表 (127次浏览)
- C#中Hashtable Dictionary的使用方法探索 (119次浏览)
- VB.NET连接数据库方法大全 (110次浏览)
- 用VB.NET 2008编写数据查询窗体 (109次浏览)
- C# .Net中的类型转换 (95次浏览)
- C#与数据结构 (92次浏览)
- C#打开WORD文档内容并显示 (92次浏览)



