2010-03-24 159 views
1

我试图同步一个SQL Server CE 3.5数据库使用MS同步服务一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://keithelder.net/blog/archive/2007/09/23/Sync-Services-for-SQL-Server-Compact-Edition-3.5-in-Visual.aspx

,但变化:

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文件中的条目(我原来的项目是一类图书馆)。我创建了一个WinForms项目并重新创建了一切,突然之间一切正常。显然这需要一个WinForm项目出于某种原因?

这是不是真的我如何计划使用这个 - 我希望揭开序幕通过另一个non-.NET应用同步,并提供UI有这样的经历是有点更无缝的终端用户。如果我不能做到这一点,这是确定的,但我真的很想知道是否/如何使这项工作作为一个类库项目来代替。

回答

0

你描述应该工作的塞纳里奥。我有一个类似的应用程序,使用类内的同步,这就OK了。你需要能够设置跟踪属性,最容易通过一个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存在任何问题。

+0

你得到这个工作? – JohnnyJP 2010-06-16 13:03:19

+0

我注意到你已经尝试了跟踪文件,现在已经使用WinForm项目工作了。我同意,我不明白为什么它不会与控制台应用程序工作。 – JohnnyJP 2010-08-25 11:20:25

2

您可以加载一个dll的配置文件这样(在类的构造函数):

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