Welcome 微信登录

首页 / 网页编程 / ASP.NET / 微软同步框架(MSF)入门开篇(附SnapShot快照Demo)

微软同步框架(MSF)入门开篇(附SnapShot快照Demo)2012-01-12 代震军 在Teched2008上听了一节关于MSF(Microsoft Sync Framework 微软同步框架),这一框架允许开发者创建离线式的应用、设备和服务,可以与任何应用的任意类型数据进行集成。

有关这个模架的介绍在网上有一些链接,而园子里也有朋友做过这方面的介绍。当时东西好不好,只有用过才会知道。今天这篇文章就是简单试用一把MSF来开发ADO.NET同步的DEMO(当然其也支持文件和文件夹的同步,我会在以后写文介绍研究心得)。因为是初次使用,所以截图多了一些,当然在概念理解上也可能有偏差,有这方面开发经验的朋友欢迎指正。

好了,开始正文吧。

在开发本应用之前,假设您已下载并安装了相应的MSF框架服务包和SDK,如果没安装的朋友请自行下载并安装。

本人下载安装的是:SyncSetup_zh-CHS.x86.zip(因为本文的VS是中文的,所以就使用了Microsoft Sync Framework v1.0 - 简体中文)当然,目前该框架的最新版本是Sync Framework v2 CTP1(目前暂无中文开发包,且不支持在1.0和2.0版本之间的组件协同操作Interoperability)。

首先,我们需要了解一下该框架实现ADO.NET同步的实现原理。请看下图:

我们可以看到在客户端数据库(SqlServerCompact3.5)与服务端数据(Server Database)之间是提供了一组(两个)Provider,分别是ClientSyncProvider和ServerSyncProvider, 其中:

ClientSyncProvider用于:

提取(供)与客户端数据存储区(SqlServerCompact3.5)进行通信并将同步代理(SyncAgent)与该数据存储区的特定实现隔离的客户端同步提供程序。说明白了就是该对象用于与本地数据存储区进行通信。

ServerSyncProvider用于:

提取(供)与服务器数据存储区(ServerDatabase)进行通信并将同步代理与该数据存储区的特定实现隔离的一般服务器同步提供程序。该对象用于与远程数据存储区进行通信。

这两个对象会通过下面的SyncAgent类以属性方式来提供:)而图中的SyncAgent用于对象组织同步过程。其中的:

Synchronize()方法会在本地和远程数据存储之间同步数据(下面会用到)。

LocalProvider属性: 获取或设置一个派生自ClientSyncProvider的对象。

RemoteProvider属性:获取或设置一个派生自ServerSyncProvider的对象。

图中的SyncTable对象表示在同步过程中涉及的表的客户端设置。比如我们可以通过SyncDirection属性来设置该值表示相对于客户端的同步方向,其类型为枚举,包括如下几个值:

Bidirectional:首次同步期间,客户端通常从服务器下载架构和一个初始数据集。执行后续同步时,客户端将更改上载到服务器,然后从服务器下载更改。

DownloadOnly:首次同步期间,客户端通常从服务器下载架构和一个初始数据集。执行后续同步时,客户端从服务器下载更改。

Snapshot: 客户端将从服务器下载一个数据集。每次同步期间,这些数据都将完全刷新(本文演示)UploadOnly: 首次同步期间,客户端通常从服务器下载架构。执行后续同步时,客户端将更改上载到服务器。

图中的SyncAdapter用于提供一组数据命令,这些命令用于获取架构信息以及在服务器数据库中检索和应用更改(通过SQL语句或存储过程)。

当然上图中的结构有些复杂,涉及到的类多了一些。但我们不用手工来写这些代码。只要按照操作导航一步步走下来,就会生成这个类了。下面就以一个快照方式(Snapshot)来开发一个DEMO来大概了解一下相应的操作流程。