2014-03-31 34 views
1

我需要與MS同步框架的幫助,因爲我在這新的。我已經嘗試了兩個不同數據庫中兩個相同表之間的簡單同步。我從MS Sync使用的代碼 http://msdn.microsoft.com/en-us/library/ff928494.aspx與MS SQL Server 2008的EE和FILESTREAM選項微軟同步框架不工作

當我嘗試應用在服務器端我得到的異常

ALTER DATABASE失敗,因爲READ_COMMITTED_SNAPSHOT和ALLOW_SNAPSHOT_ISOLATION選項不能設置爲ON時,數據庫有FILESTREAM文件組的配置。要將READ_COMMITTED_SNAPSHOT或ALLOW_SNAPSHOT_ISOLATION設置爲ON,您必須從數據庫中刪除FILESTREAM文件組。 ALTER DATABASE語句失敗。

public void CreateProvisioningOnServer() 
{ 

    // create a connection to the SyncExpressDB database 
    SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS2008; Initial Catalog=SyncDB; Trusted_Connection=Yes"); 

    // get the description of ArticlesScope from the SyncDB server database 
    DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("ArticlesScope", serverConn); 

    // create server provisioning object based on the ProductsScope 
    SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc); 


    if (clientProvision.ScopeExists(scopeDesc.ScopeName)) 
    return; 

    // starts the provisioning process 
    clientProvision.Apply(); 
} 

我使用了SQL Server 2008 Express的版本存儲圖像FILESTREAM選項,所以我不能使用MS同步框架,因爲它是我必須重寫莫名其妙的SqlSyncScopeProvisioning?

下一個問題我有

我使用的MS同步框架2個數據庫之間的同步,無論是在速成版。

客戶端將從16個服務器表下載數據 - 表結構相同。 客戶端將數據上傳到4個服務器表 - 也許客戶端和服務器上的表結構不同。

難道我要去使用MS同步框架好辦法嗎? 我一直通過自己的存儲過程進行這種同步 - 但當通過互聯網和鏈接服務器與客戶端數據庫進行同步時,性能問題(以及其他問題)效率非常低。

那麼哪條路走?

+0

第一個問題:是否可以使用2個數據庫,一個是同步的,另一個是與圖像不同的數據庫?或者你是否需要同步圖像?在這種情況下,您可以使用同步框架文件同步而不是數據庫同步的圖像? – stombeur

+0

第二個問題:是的,只要你堅持使用這種數量的表(20-ish),同步fw就可以適用於這種情況。我已經使用了同步fw 2.1方法(元數據表),但稍後決定使用更改跟蹤的2.0方法更好。儘管如此,客戶端並不支持這種方式。但是有一個很好的(不支持)解決方法。 – stombeur

+0

@StephaneT謝謝你的時間。是的,我需要同步圖像。但主要問題是,即使我沒有同步圖像,同步框架也會拋出異常。 – MartinM

回答

0

同步框架使用快照隔離過濾掉在同步過程中所發生的變化。如果您使用較低的隔離級別,則同步過程中發生但已回滾的更改仍可能包含在同步中。這將導致服務器上不存在的更改(它們被回滾)發送給客戶端。這就是爲什麼你得到錯誤並解決它,你可以像你指出的那樣重寫SqlSyncProvider。但我不會推薦。

從我的理解,如果你想繼續使用同步框架,你會過得更好,從你的服務器數據庫中刪除與圖像的表和刪除服務器數據庫中的FILESTREAM選項文件組。

之後,同步的數據部分應該工作。然後,您可以決定如何將圖像同步到客戶端。可以將它們存儲在服務器上的磁盤上,並使用標準同步框架文件同步到客戶端,或將它們存儲在另一個數據庫中(位於同一臺服務器上),並將同步框架文件同步從數據庫中而不是從磁盤中讀取,將它們發送到客戶端的磁盤上。