同步服务实际上并不同步

时间:2010-03-24 13:54:46

标签: microsoft-sync-framework

我正在尝试使用MS Sync Services将SQL Server CE 3.5数据库与SQL Server 2008数据库同步。我正在使用VS 2008.我创建了一个本地数据库缓存,将其与SQL Server 2008连接并选择了我想要同步的表。我选择了SQL Server Tracking。它修改了数据库以进行更改跟踪,并创建了数据的本地副本(SDF)。

我需要双向同步,所以我为同步代理创建了一个分部类,并在OnInitialized()中添加了代码,将表的SyncDirection设置为Bidirectional。我已经使用调试器并运行此代码。

然后我为缓存服务器同步提供程序创建了另一个部分类,并在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 framework 2.0并将新版本的程序集添加到项目中。这没有任何区别。

想法?

编辑:我想启用跟踪以查看是否可以跟踪此情况,但唯一的方法是通过WinForms应用程序,因为它需要app.config文件中的条目(我原来的project是一个类库。我创建了一个WinForms项目并重新创建了一切,突然间一切正常。显然这需要一个WinForm项目出于某种原因?

这并不是我计划如何使用它 - 我原本希望通过另一个非.NET应用程序启动同步并在那里提供UI,以便最终用户的体验更加简单。如果我不能那样做,那没关系,但我真的想知道是否/如何使这项工作成为一个类库项目。

2 个答案:

答案 0 :(得分:2)

您可以通过这种方式加载dll的配置文件(在您的类'构造函数中):

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", System.IO.Path.Combine(Environment.CurrentDirectory, "<dll name>.config"));
System.Configuration.ConfigurationManager.RefreshSection("configuration");

答案 1 :(得分:0)

您描述的Senario应该有效。我有一个类似的应用程序在类中使用同步,这没关系。你需要能够设置跟踪属性,最容易通过app.config,但这不是你的问题...没有报告错误Syncronize方法?

没有引发冲突错误?

如果您仍然遇到困难,可以在

部分中将以下位添加到应用程序配置文件中
   <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以了解任何问题。