共用方式為


處理衝突

為了確保同步處理社群中的項目變更能夠正確傳播,目的地提供者必須偵測及處理從來源提供者傳送之項目以及目的地複寫中的項目之間所發生的衝突。Sync Framework 會提供用來執行偵測及處理衝突所需之最多工作的變更套用者物件。

Sync Framework 支援兩種可能會在同步處理期間發生的衝突類別:「並行衝突」(Concurrency Conflict) 和「條件約束衝突」(Constraint Conflict)。在兩個不同的複寫上變更了相同的項目或變更單位,然後進行同步處理時,就會發生並行衝突。條件約束衝突是違反在項目或變更單位上所設條件約束 (例如資料夾的關聯性或檔案系統之中名稱完全相同之資料的位置) 的衝突。

Sync Framework 為同步處理應用程式提供兩種方式,以指定衝突的處理方式:設定衝突解決原則來套用到工作階段期間發生的所有衝突,或是藉由註冊來接收每一個偵測到的衝突通知,以便可以個別檢查及解決每一個衝突。

衝突處理的執行流程

在同步處理的變更套用階段偵測及處理衝突。一般來說,這會發生在目的地提供者的 ProcessChangeBatch (Managed 程式碼) 或 ProcessChangeBatch (Unmanaged 程式碼) 方法中。

當目的地提供者使用 Sync Framework 變更套用者時,將會針對變更批次中的每一個項目執行以下步驟。

  1. 此變更套用者會驗證目的地複寫中的任何項目更新是否會造成該項目與來源變更發生並行衝突。例如,當此項目已經在來源和目的地複寫的本機變更時,就會偵測到更新與更新衝突。

  2. 當應用程式已經為並行衝突指定衝突解決原則時,變更套用者會根據原則來指派衝突解決動作。否則,變更套用者會通知應用程式發生衝突,而應用程式會指定衝突解決動作。

  3. 變更套用者會分派目的地提供者的呼叫,以便根據衝突解決動作來套用變更。例如,從目的地複寫中刪除此項目,並使用來源提供者中的項目取代這個項目。

  4. 當變更是由目的地提供者套用到目的地複寫時,目的地提供者會偵測到條件約束衝突。例如,來源變更會由 id1 所識別,而且名稱為 "FavoriteBooks",但是目的地複寫包含由 id2 所識別而且名稱也是 "FavoriteBooks" 的項目。目的地複寫會將項目視為相同,因為這兩個項目具有相同的名稱,但是 Sync Framework 則會將它們視為不同,因為這兩個項目具有不同的項目識別碼。目的地提供者會將條件約束衝突報告給變更套用者。

  5. 當應用程式已經指定衝突解決原則,而且條件約束衝突是因為衝突而發生時,變更套用者會根據原則來指派衝突解決動作。否則,變更套用者會通知應用程式發生衝突,而應用程式會指定衝突解決動作。

  6. 變更套用者會分派目的地提供者的呼叫,以便根據衝突解決動作來套用變更。

如需處理並行衝突的詳細資訊,請參閱偵測及解決並行衝突

如需處理條件約束衝突的詳細資訊,請參閱偵測及解決條件約束衝突

使用變更單位減少衝突

使用變更單位來代表子項目變更可以減少衝突的數量。使用變更單位時,是為變更單位追蹤版本,而不是為整個項目追蹤。因此,在相同項目內對不同變更單位所做的變更不會導致衝突發生。如需詳細資訊,請參閱同步處理變更單位

將衝突儲存到記錄檔中

將衝突儲存到記錄檔中可能會很實用,這樣可以與同步處理工作階段分開來處理衝突,例如當使用者要檢閱衝突,並決定如何解決衝突時。此外,當合併衝突之兩個項目的資料來解決條件約束衝突時,某些情況下的變更套用者可能會使用衝突記錄檔來存放同步處理工作階段期間發生的暫時性衝突。

如需建立及使用衝突記錄檔的詳細資訊,請參閱記錄及管理衝突

請參閱

參考

ISynchronousNotifyingChangeApplier 介面
ISynchronousNotifyingChangeApplierTarget 介面
NotifyingChangeApplier
INotifyingChangeApplierTarget

概念

實作標準的自訂提供者
套用變更