我是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上關閉的記錄,運行同步並同步。我用另一條記錄再次嘗試,這是發生了什麼事。我只想看到一致的結果。我錯過了什麼?
訂閱遠程提供程序的ApplyChangesFailed事件並檢查sql相關的錯誤或衝突。 – JuneT
謝謝,FWIW,我打印syncStats.UploadChangesApplied,syncStats.UploadChangesFailed和syncStats.UploadChangesTotal,我沒有看到任何錯誤。這是一回事嗎?我不確定ApplyChangesFailed是什麼,但如果需要的話,我會解決它。 –
ApplyChangesFailed是由於SQL錯誤或衝突導致Sync Framework無法應用更改時觸發的事件。只是爲了確認,你得到的行爲是,當你從客戶端更新一行到「關閉」這個更新不適用於服務器?要了解本地更改是否由Sync Framework提取,請訂閱本地提供者的ChangesSelected事件。這裏的事件參數有一個變化的數據集,所以你應該看看它是否被檢測爲變化。 – JuneT