同步服务实际上并未同步
Posted
技术标签:
【中文标题】同步服务实际上并未同步【英文标题】:Sync services not actually syncing 【发布时间】:2010-03-24 13:54:45 【问题描述】:我正在尝试使用 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
这里:
http://keithelder.net/blog/archive/2007/09/23/Sync-Services-for-SQL-Server-Compact-Edition-3.5-in-Visual.aspx
此时这似乎应该“正常工作”,但在服务器上所做的更改不在本地 SDF 文件中。我想我错过了一些东西,但我现在没有看到它。
我认为这可能是因为我似乎使用的是 Sync Services 版本 1,因此我删除了对 Microsoft.Synchronization.* 程序集的引用,安装了 Sync 框架 2.0 并将新版本的程序集添加到项目中。这没有任何区别。
想法?
编辑:我想启用跟踪以查看是否可以跟踪此问题,但唯一的方法是通过 WinForms 应用程序,因为它需要 app.config 文件中的条目(我原来的项目是一个类库)。我创建了一个 WinForms 项目并重新创建了所有内容,突然间一切正常。那么显然这出于某种原因需要一个 WinForm 项目?
这并不是我真正计划使用它的方式——我曾希望通过另一个非 .NET 应用程序开始同步,并在那里提供 UI,这样最终用户的体验就更加模糊了。如果我不能这样做,那没关系,但我真的很想知道是否/如何使它作为一个类库项目工作。
【问题讨论】:
【参考方案1】:您可以通过这种方式加载 dll 的配置文件(在您的类的构造函数中):
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", System.IO.Path.Combine(Environment.CurrentDirectory, "<dll name>.config"));
System.Configuration.ConfigurationManager.RefreshSection("configuration");
【讨论】:
【参考方案2】:您描述的情景应该可以工作。我有一个类似的应用程序,它在一个类中使用同步,没关系..您确实需要能够设置跟踪属性,最容易通过 app.config,但这不是您的问题...没有报告错误同步方法?
没有引发冲突错误?
如果您仍然遇到困难,您可以将以下位添加到您的应用程序配置文件中的部分
<switches>
<add name="DefaultSwitch" value="Information" />
<!-- Sync Tracer Setting 0-off, 1-error, 2-warn, 3-info, 4-verbose. -->
<add name="SyncTracer" value="4" />
</switches>
<trace autoflush="true">
<listeners>
<add name="TestSyncListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\SyncTraceFile.txt" />
</listeners>
</trace>
然后查看 c:\SyncTraceFile.txt 是否有任何问题。
【讨论】:
我注意到您已经尝试过跟踪文件,现在已经使用 WinForm 项目使其工作。我同意我不明白为什么它不能与控制台应用程序一起使用。以上是关于同步服务实际上并未同步的主要内容,如果未能解决你的问题,请参考以下文章