Microsoft Sync Frameworks简称MSF,是一个综合的同步平台,MSF支持应用程序,服务,设备的在线以及离线同步。MSF主要有以下几个部件组成:
* Sync Services for ADO.NET: 同步ADO.NET的数据
* Sync Services for FeedSync: 同步 RSS 和 ATOM 种子
* Sync Services for File Systems: 同步文件和文件夹
* Sync Framework Core Runtime: 客户化的同步方案,支持native code。
本文主要讲述如何快速建立一个Sync Services for ADO.NET的应用进行数据同步。由于在PC的winform项目可以在使用向导快速建立同步程序,所以本文先介绍PC的webform程序上的Sync Services for ADO.NET开发,陆续会介绍移动设备上的开发,这也是我最关心的部分。
下载安装
请到以下链接下载 。 Microsoft Synchronization Services for ADO.NET本地缓存数据需要使用SQL CE 3.5,不能支持SQL CE 3.0。SQL CE 3.5和3.0的差异可以参考
建立Local Database Cache
先建立一个PC的winform程序。右键项目新建“New Item”,经过了Microsoft Synchronization Services for ADO.NET 的安装,新建向导会出现“Local Database Cache”,选择该类型。
![2009041707301123.png](https://pic002.cnblogs.com/img/procoder/200904/2009041707301123.png)
图1
这个文件可以建立服务器与本地数据库的同步关系,服务器数据库可以为支持ADO.NET的任何数据库,我使用免费的SQL Server Express,本地数据库是SQL CE 3.5,可以不用手工建立,向导程序根据服务器数据自动生成本地数据库。SQL Server Express的下载安装可以参考
在SQL Server Express上建立一个库叫做TestDB,建立两个表,表结构如下:
CREATE TABLE [dbo].[t1]( [f1] [ int ] NOT NULL, [f2] [nvarchar]( 50 ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED ( [f1] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[t2]( [f1] [ int ] NOT NULL, [f2] [datetime] NOT NULL, CONSTRAINT [PK_t2] PRIMARY KEY CLUSTERED ( [f1] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
选择数据库
![2009041707315743.png](https://pic002.cnblogs.com/img/procoder/200904/2009041707315743.png)
图2
配置完数据库服务器后,可以选择“Add”增加需要同步的表,在例子中选择t1和t2。
![2009041707321890.png](https://pic002.cnblogs.com/img/procoder/200904/2009041707321890.png)
图3
如果数据表属于下面的情况,那么就不能显示出来进行选择:
1.不是用户默认的原数据(user’s default schema)。
2.没有定义主键。
3.名字长于118个字符。
4.字段中有SQL CE 3.5不支持的数据类型。
在默认选择下向导会为原始表自动增加LastEditDate和CreationDate自动。同时增加数据表 (原表名_TombStone)。
添加数据源(DataSet)
在增加同步数据表完毕后,向导自动弹出增加数据源(DataSet)的向导,填写DataSet的名字,选择所以表格和字段。
![2009041707324485.png](https://pic002.cnblogs.com/img/procoder/200904/2009041707324485.png)
图4
系统会自动的生成处理类和数据类,如下图
![2009041707330478.png](https://pic002.cnblogs.com/img/procoder/200904/2009041707330478.png)
图5
代码编写
在程序中增加Load事件处理函数和增加一个按钮以及处理函数,添加代码如下:
public partial class Form1 : Form { TestDbDataSet testDbDataSet = new TestDbDataSet(); TestDbDataSetTableAdapters.t1TableAdapter t1TableAdapter = new TestDbDataSetTableAdapters.t1TableAdapter(); TestDbDataSetTableAdapters.TableAdapterManager tableAdapterManager = new TestDbDataSetTableAdapters.TableAdapterManager(); public Form1() { InitializeComponent(); } private void button1_Click( object sender, EventArgs e) { tableAdapterManager.UpdateAll(testDbDataSet); // Call SyncAgent.Synchronize() to initiate the synchronization process. // Synchronization only updates the local database, not your project's data source. LocalDataCache1SyncAgent syncAgent = new LocalDataCache1SyncAgent(); Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize(); testDbDataSet.t1.Merge(t1TableAdapter.GetData()); } private void Form1_Load( object sender, EventArgs e) { t1TableAdapter.Fill(testDbDataSet.t1); } } 一个从server同步到本地SQL CE的程序完成了。
TestDbDataSet: 表示一个强类型的内存数据缓存。
t1TableAdapter 表示用于取数据库和保存数据的connection和commands。
TableAdapterManager 用于协助TableAdapters之间关联关系的更新(Hierarchical Update)。
测试
在SQL Server Express里的t1表格增加些数据,如下
![2009041707374841.png](https://pic002.cnblogs.com/img/procoder/200904/2009041707374841.png)
图6
运行程序,点击同步按钮进行同步。
在VS2008打开SQL CE数据库,你会发现SQL CE库的数据和SQL Server Express里的t1表格一模一样。
修改,删除SQL Server Express里的t1表格的数据,进行再测试,也会发现SQL CE库同步在服务器上的数据。
参考文献
本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/04/17/1437686.html,如需转载请自行联系原作者