2010-03-24 155 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");