1

我是Sync Framework的新手。這是使用2.1版本SQL CE到Azure同步框架似乎工作但不一致

我的項目包括一個同步SQL CE到SQL Azure的(即將成爲SQL Server 2008中)

現在我有一個非常簡單的同步規劃工作。我希望將來自索賠和相關表庫存的記錄中的所有數據上傳到SQL Azure,其中Claims.Status ='已關閉'。這就是我現在想要的,我已經看到它的工作,但它不會工作。我看不到任何錯誤消息,我不知道它在做什麼。我已經試過跟蹤工具,其結果是希臘和據我可以告訴它沒有提及有關數據

這裏任何事情都是在Windows控制檯應用程序代碼的摘錄:

//For Provisioning... 
myScope.Tables.Add(Claims); 
myScope.Tables.Add(Inventory); 

SqlSyncScopeProvisioning sqlAzureProv = new SqlSyncScopeProvisioning(sqlAzureConn, myScope); 

sqlAzureProv.Tables["Claims"].AddFilterColumn("Status"); 
sqlAzureProv.Tables["Claims"].FilterClause = "[side].[Status] = 'Closed'"; 
sqlAzureProv.Apply(); 

//For the client... 
DbSyncScopeDescription clientSqlCeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope(myScope.ScopeName, null, "dbo", sqlAzureConn); 
SqlCeSyncScopeProvisioning sqlCeProv = new SqlCeSyncScopeProvisioning(sqlCeConn, clientSqlCeDesc); 
sqlCeProv.Apply(); 

//For Syncing: 
SqlCeConnection sqlCeConn = new SqlCeConnection(sqlCeConnectionString); 
SqlConnection sqlAzureConn = new SqlConnection(sqlazureConnectionString); 
SyncOrchestrator orch = new SyncOrchestrator 
{ 
    RemoteProvider = new SqlSyncProvider(scopeName, sqlAzureConn), 
    LocalProvider = new SqlCeSyncProvider(scopeName, sqlCeConn), 
    Direction = SyncDirectionOrder.Upload 
}; 
Console.WriteLine("ScopeName={0} ", scopeName.ToUpper()); 
Console.WriteLine("Starting Sync " + DateTime.Now); 
ShowStatistics(orch.Synchronize()); 

至於本地和遠程數據庫上的數據,本地數據庫上還有一個「關閉」記錄比遠程數據庫上的記錄多一個。我取消了配置並進行了配置以刷新它。然後,當我同步時,結果顯示38個變化,我不知道數據發生了什麼變化,但我知道應該更新爲「已關閉」的記錄仍處於打開狀態。

我已經看到了這項工作,我更新了兩個要在CE上關閉的記錄,運行同步並同步。我用另一條記錄再次嘗試,這是發生了什麼事。我只想看到一致的結果。我錯過了什麼?

+0

訂閱遠程提供程序的ApplyChangesFailed事件並檢查sql相關的錯誤或衝突。 – JuneT

+0

謝謝,FWIW,我打印syncStats.UploadChangesApplied,syncStats.UploadChangesFailed和syncStats.UploadChangesTotal,我沒有看到任何錯誤。這是一回事嗎?我不確定ApplyChangesFailed是什麼,但如果需要的話,我會解決它。 –

+0

ApplyChangesFailed是由於SQL錯誤或衝突導致Sync Framework無法應用更改時觸發的事件。只是爲了確認,你得到的行爲是,當你從客戶端更新一行到「關閉」這個更新不適用於服務器?要了解本地更改是否由Sync Framework提取,請訂閱本地提供者的ChangesSelected事件。這裏的事件參數有一個變化的數據集,所以你應該看看它是否被檢測爲變化。 – JuneT

回答

2

我對任何花時間看這篇文章的人表示歉意。這是我對Sync Framework的工作原理的誤解。我今天瞭解到,靜態過濾器不會將更改傳播到現有/已跟蹤的記錄,它們只會插入新記錄。同步框架比我一直信任的要更加流暢和複雜得多。我只需要做更多的閱讀和研究。

特別感謝JuneT,不僅僅是爲了您的回覆,還有我在其他網站上發現的大量信息,您已參與其中。也感謝任何花時間看這篇文章的人。