Microsoft Sync Framework基础篇 1:Microsoft Sync Framework简介
前言
最近,Team接手Microsoft Sync Framework(MSF)相关的开发工作,所以得此良机近距离的研究和学习Microsoft Sync Framework这个优秀的同步工具。当然,第一步自然是学习它的使用方式,下面就是本人学习Microsoft Sync Framework的一系列学习笔记,本着分享学习、共同进步的目的,将系列笔记发于博客园。希望与使用Microsoft Sync Framework的园友共同探讨和学习。初涉同步领域,错误或不当之处,还希望大家不吝指正。
下面先给出系列随笔的大致目录,在写作过程中会根据需要进行微调。
目录
第一部分Microsoft Sync Framework基础
Microsoft Sync Framework架构与运行时
Microsoft Sync Framework元数据和同步流程
第二部分 同步数据库
示例:同步 SQL Server 和 SQL Server Compact
第三部分 同步文件
同步文件简介
示例
第四部分 同步Web Feeds
同步Web Feeds简介
第五部分使用自定义提供程序
自定义提供程序基础
实现简单的自定义提供程序
实现标准的自定义提供程序
第六部分 Microsoft Sync Framework 4.0 CTP
CTP简介
Sync Protocol规范
示例:创建和使用Sync Service
SyncSvcUtil简介
SyncSvcUtilHelper简介
Microsoft Sync Framework简介
引入Microsoft Sync Framework
同步的优点
在深入学习MSF之前,我们有必要先对同步这个概念来做一个了解,以及为什么同步是必须的。简单来说,同步是保持两个端点/数据存储区中数据一致性的过程。当两个数据存储区中内容完全一致时,我们可以说它们是相互同步的。
比如,如果你想手工同步两个数据库,我们通常会这么做:
- 找出源数据库中的变更
- 把变更发往目标数据库
- 在目标数据库中应用变更
- 交换源数据库和目标数据库,重复上述步骤
那么,对一个程序,数据存储区或services来讲,我们为何需要为其创建同步机制呢?下面列出了同步最常用的好处:
离线操作:同步最大的优点就是使我们能够让程序支持离线操作。如果我们为程序创建了同步机制,那么程序用户就可以和本地数据进行交互。直到我们需要从服务器端下载新数据时或者重新获得网络连接时,才使用联网操作。
创建更快速和丰富的用户界面:通过为程序建立同步机制,我们可以创建更加丰富的用户界面,而不用担心程序的性能问题。因为所有的数据通常都从本地获取,所以程序会为我们提供更加迅速的反馈。
降低网络开销:支持同步的程序通常支持上传/下载的增量更新,所以降低了通过网络传输的数据量。
上面只是列出了同步给我们带来的部分好处,现在,我们应该能够了解同步的必要性了。下面我们将讨论如何实现同步。
实现同步的挑战
虽然同步在理论上十分简单,但是,实践起来却十分困难。理解这些问题会让我们更好的了解Microsoft Sync Framework的重要性。具体来说,同步过程中的问题与挑战如下:
错误与失败处理:设想我们正在同步两个数据库,一个程序错误发生了,比如数据库连接超时或者是往目标数据库应用更改时违反了某个约束,被同步的记录该如何处理呢?
网络失效:还是上面同步数据库的示例,假如一个数据库在从另一个数据库获取更新时,网络突然失效了,我们该如何应对?
冲突检测:冲突是指当同一个数据项目同时被同步两端所修改。我们又该如何应对?
显然,我们可以自己书写代码来解决上述的所有问题。但是如果能有一个同步框架能替我们解决所有这些问题,而我们可以专注于实现自己的业务逻辑时,岂不美哉。好了,是时候介绍Microsoft Sync Framework了,Microsoft为我们提供了这个同步框架,不仅内置了解决上述问题的功能,而且可以在任何网络、任何协议中同步两个数据存储区。
为何选择Microsoft Sync Framework
Microsoft Sync Framework给我们提供的最大好处在于:它的同步功能支持了数据的离线和在线操作。MSF的主要目的在于允许我们的数据同步集成任何数据源,而不论是何种类型的数据。
让我们先来看看Microsoft对于Microsoft Sync Framework的官方定义:Sync Framework 是一个功能完善的同步平台,实现了应用程序、服务和设备的协作和脱机访问。Sync Framework 提供了一些可支持在脱机状态下漫游、共享数据和获取数据的技术和工具。通过使用 Sync Framework,开发人员可以构建同步生态系统,通过在任意网络上使用任意协议,将任意应用程序与任意存储区中的数据集成在一起。
下面是Microsoft Sync Framework的一些主要特征:
- 独立于底层数据存储、数据类型和协议的强大同步平台
- 可扩展的提供程序模型
- 用于同步数据子集的筛选器
- 内置自动和自定义冲突解决方案
- 对文件系统、数据库和RSS、Atom feeds的同步支持
- 支持对等协作方式和客户端-服务器拓扑
- 为托管代码和非托管代码都提供了API
Microsoft Sync Framework安装
Microsoft Sync Framework 2.1
目前,Microsoft Sync Framework的最新发布版本是2.1(当然下面即将提到的Sync Framework 4.0 CTP除外),我们可以通过SDK安装包安装开发组件。从 Microsoft Download Center(Microsoft 下载中心)下载此安装包,按照该网站上提供的安装说明操作。
在 x86 平台上,x86 安装包将会将主要组件安装到 Program Files\Microsoft SDKs\Microsoft Sync Framework\2.1 中,并且将托管 DLL 添加到全局程序集缓存 (GAC)。在 64 位平台上,x86 和 x64 安装包安装到 Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1 中。
Sync Framework 2.1 包括以下方面的新功能和增强功能:
数据库提供程序
- SQL Azure 同步
- 成批应用变更
- 基于参数的筛选
- 删除作用域和模板
- 升级元数据格式
- SQL Server Compact 3.5 SP2 兼容性
Microsoft Sync Framework 4.0 CTP
Microsoft Sync Framework 4.0 社区技术预览版(CTP)建立在Sync Framework 2.1之上。实际上,Sync Framework 2.1是安装MSF 4.0 CTP的前提,尽管Sync Framework 4.0的最终发布版本会是一个完整的安装包,不再需要Sync Framework 2.1。
请按以下步骤安装Microsoft Sync Framework 4.0 CTP版本:
1. 安装Microsoft Sync Framework 2.1 SDK,见前一小节,或直接从这里下载:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23217
2. 点击以下链接 Sync Framework在线调查 完成Microsoft关于Sync Framework的在线调查:
3. 一旦你提交了该在线调查,你将会在Microsoft Connect站点看到Sync Framework 4.0 CTP的下载链接:
Microsoft Sync Framework 4.0 CTP对Sync Framework 2.1进行了扩展,以允许我们针对任何平台来创建脱机应用。在Sync Framework之前的版本中,我们必须使用安装了Sync Framework运行时的Windows系统来作为客户端。而CTP允许Microsoft的其他平台比如Silverlight, Windows Phone 7, 和Windows Mobile, 以及其他的非微软平台如iPhone, Android, 和Blackberry,而不需要为这些平台的客户端安装任何Sync Framework组件,这是因为所有的同步逻辑都从客户端移到了服务端。那么Microsoft Sync Framework 4.0 CTP的这种跨平台能力是如何得到的呢,答案在于它定义了一个新的基于HTTP的同步协议:Sync Protocol。
本系列博客以Sync Framework 2.1为主要目标,当然,对于Microsoft Sync Framework 4.0 CTP我也会在专门的篇章里给予详细介绍。
一个简单的示例
下面这个例子将使用Sync Framework内置的文件同步提供程序来实现两个目录之间的同步。
- 新建一个Console Application(控制台应用程序),名为FileSyncSample。
- 添加对Microsoft.Synchronization、Microsoft.Synchronization.Files程序集的引用。
- 修改Main函数为如下格式:
using System;
using Microsoft.Synchronization.Files;
using Microsoft.Synchronization;
namespace FileSyncSample
{
class Program
{
static void Main(string[] args)
{
// Create Source Sync Provider
FileSyncProvider sourceProvider = new FileSyncProvider(@"C:\TestSync1");
// Create Target Sync Provider
FileSyncProvider destProvider = new FileSyncProvider(@"C:\TestSync2");
// Create Sync Orchestrator(同步会话)
SyncOrchestrator syncAgent = new SyncOrchestrator();
syncAgent.LocalProvider = sourceProvider;
syncAgent.RemoteProvider = destProvider;
// 开始同步
syncAgent.Synchronize();
Console.WriteLine("同步完成");
}
}
}
上面这个简单的程序就完成了两个目录之间的同步工作,请建立相应的目录和文件来验证它的同步功能吧,相信你会和我一样惊讶于Sync Framework让我们的同步工作变得如此简单,那么让我们一起走进Microsoft Sync Framework的世界吧。