我正在尝试使用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
在这里:
此时似乎应该“正常工作”,但服务器上所做的更改不在本地SDF文件中。我想我错过了一些东西,但我现在还没有看到它。
我认为这可能是因为我似乎使用了Sync Services的第1版,因此我删除了对Microsoft.Synchronization。*程序集的引用,安装了Sync framework 2.0并将新版本的程序集添加到项目中。这没有任何区别。
想法?
编辑:我想启用跟踪以查看是否可以跟踪此情况,但唯一的方法是通过WinForms应用程序,因为它需要app.config文件中的条目(我原来的project是一个类库。我创建了一个WinForms项目并重新创建了一切,突然间一切正常。显然这需要一个WinForm项目出于某种原因?
这并不是我计划如何使用它 - 我原本希望通过另一个非.NET应用程序启动同步并在那里提供UI,以便最终用户的体验更加简单。如果我不能那样做,那没关系,但我真的想知道是否/如何使这项工作成为一个类库项目。
答案 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以了解任何问题。