我正在尝试使用 MS Sync Services 将 SQL Server CE 3.5 数据库与 SQL Server 2008 数据库同步。我正在使用 VS 2008。我创建了一个本地数据库缓存,将其与 SQL Server 2008 连接并选择了我想要同步的表。我选择了 SQL Server 跟踪。它修改了数据库以进行更改跟踪,并创建了数据的本地副本 (SDF)。
我需要两种方式同步,因此我为同步代理创建了一个部分类,并将代码添加到 OnInitialized() 以将表的 SyncDirection 设置为双向。我已经使用了调试器,并且这段代码运行了。
然后我为缓存服务器同步提供程序创建了另一个部分类,并在 OnInitialized() 中添加了一个事件处理程序以挂钩 ApplyChangeFailed 事件。此代码也可以正常工作 - 我的代码在发生冲突时运行。
最后,我手动对服务器数据进行了一些更改以测试同步。我使用此代码触发同步:
var agent = new FSEMobileCacheSyncAgent();
var syncStats = agent.Synchronize();
syncStats 似乎显示了我在服务器上所做的更改的计数,并表明它们已被应用。但是,当我打开本地 SDF 文件时,没有任何更改。
我基本上按照我在这里找到的说明进行操作:
http://msdn.microsoft.com/en-us/library/cc761546%28SQL.105%29.aspx
和这里:
此时似乎这应该“正常工作”,但在服务器上所做的更改不在本地 SDF 文件中。我想我错过了一些东西,但我现在没有看到它。
我认为这可能是因为我似乎使用的是 Sync Services 版本 1,因此我删除了对 Microsoft.Synchronization.* 程序集的引用,安装了 Sync 框架 2.0 并将新版本的程序集添加到项目中。那没有任何区别。
想法?
编辑:我想启用跟踪以查看是否可以跟踪它,但唯一的方法是通过 WinForms 应用程序,因为它需要 app.config 文件中的条目(我的原始项目是一个类库)。我创建了一个 WinForms 项目并重新创建了所有内容,突然间一切正常。那么显然这出于某种原因需要一个 WinForm 项目?
这并不是我真正计划使用它的方式——我曾希望通过另一个非 .NET 应用程序开始同步并在那里提供 UI,这样最终用户的体验就更加模糊了。如果我不能这样做,那没关系,但我真的很想知道是否/如何使它作为一个类库项目工作。