資料同步處理的基礎
Microsoft Sync Framework 會使用三個基本元件,同步處理資料存放區或「複寫」(Replica):一個同步處理工作階段和兩個同步處理提供者。若要同步處理資料,應用程式會建立同步處理工作階段,並傳遞給來源提供者和目的地提供者。此工作階段會使用來源地提供者,以取得在來源複寫上發生的新變更,並使用目的地提供者,將這些變更套用到目的地複寫。
建立提供者最需要進行開發工作。提供者會為複寫維護中繼資料和知識,並為要進行同步處理的每個項目維護中繼資料。提供者也會與其資料存放區來回傳輸實際的項目資料。提供者會使用 Sync Framework 元件,在做為來源時,協助列舉變更;並在做為目的地時,偵測衝突並套用變更。
同步處理演算法
單向同步處理的演算法包括下列步驟:
工作階段取得目的地複寫的目前知識,然後傳送給來源提供者。
來源提供者列舉沒有包含在目的地知識中的變更。
來源提供者傳送變更給工作階段。
工作階段偵測衝突,並透過目的地提供者套用變更至目的地複寫。
兩個複寫之間的雙向同步處理是透過兩個單向同步處理來完成。
Managed 程式碼:SyncOrchestrator 物件會在 Direction 屬性設定為 DownloadAndUpload 或 UploadAndDownload 時,執行兩個單向同步處理。
Unmanaged 程式碼:應用程式必須為每個單向同步處理建立 ISyncSession 物件。
中繼資料管理
每個複寫都必須提供一組描述本身及其知識的中繼資料給「同步處理社群」(Synchronization Community)(同步處理社群是可彼此保持同步的一組複寫)。每個複寫所需要的中繼資料包括:複寫識別碼、目前的滴答計數、複寫機碼對應、目前的知識、被遺忘的知識、衝突記錄檔,以及標記記錄檔。複寫也必須為要進行同步處理的每個項目維護中繼資料。每個項目所需的中繼資料是:全域識別碼、目前版本,以及建立版本。一般來說,同步處理提供者會管理同步處理所需的中繼資料。但是依複寫的實作而定,部分中繼資料管理交由不同的元件處理可能會更有用,例如依排定的時間而不是在同步處理期間清除標記的服務。
如需中繼資料的詳細資訊,請參閱中繼資料需求。
同步處理提供者
提供者為複寫管理中繼資料,並使用 Sync Framework,列舉變更及偵測衝突。提供者也會在擔任來源提供者時,使用複寫的項目存放區來傳送項目資料,並在擔任目的地提供者時,套用變更。
Managed 程式碼:提供者會從 KnowledgeSyncProvider、IChangeDataRetriever 和 INotifyingChangeApplierTarget 實作抽象方法和屬性。
Unmanaged 程式碼:提供者會實作 IKnowledgeSyncProvider、ISyncProvider、ISynchronousDataRetriever 和 ISynchronousNotifyingChangeApplierTarget 介面 (或為非同步提供者實作非同步版本)。
如需同步處理提供者以及如何實作並使用這些介面的詳細資訊,請參閱同步處理提供者。
同步處理應用程式
應用程式是一種元件,會建立同步處理工作階段物件、將此物件與提供者連接,並裝載同步處理執行階段。
使用 Managed 程式碼實作同步處理應用程式
若要啟動同步處理,請建立 SyncOrchestrator 物件,然後將 LocalProvider 和 RemoteProvider 屬性設定為要同步處理之兩個提供者的 SyncProvider 介面。應用程式會透過使用適當的任何方法,取得或建立提供者介面。建立 SyncOrchestrator 物件之後,呼叫 Synchronize 以啟動同步處理。此時,Sync Framework 會進行所有必要的呼叫進入兩個提供者中,以執行同步處理。
SyncOrchestrator 物件和 KnowledgeSyncProvider 物件都會在同步處理期間引發事件。若要接到事件,請實作事件的處理常式方法,並註冊以便接收事件。
使用 Unmanaged 程式碼實作同步處理應用程式
若要啟動同步處,請透過傳遞 CLSID_SyncServices 和 IID_IApplicationSyncServices 給 CoCreateInstance 函式,然後在傳回的 IApplicationSyncServices 物件上,呼叫 IApplicationSyncServices::CreateSyncSession 物件,以建立 ISyncSession 物件。
CreateSyncSession 方法需要有要進行同步處理之兩個提供者的 ISyncProvider 介面。應用程式會透過使用適當的任何方法,取得或建立提供者介面。建立 ISyncSession 物件之後,呼叫 ISyncSession::Start 以啟動同步處理。此時,Sync Framework 會進行所有必要的呼叫進入兩個提供者中,以執行同步處理。
ISyncSession 物件會在同步處理期間引發事件。若要接到事件,請使用 ISyncSession::RegisterCallback,實作 ISyncCallback 介面並加以註冊。
請參閱
參考
ISyncSession 介面
ISyncProvider 介面
IKnowledgeSyncProvider 介面
ISynchronousDataRetriever 介面
ISynchronousNotifyingChangeApplierTarget 介面
IApplicationSyncServices 介面
IProviderSyncServices 介面
ISyncCallback 介面
SyncOrchestrator
KnowledgeSyncProvider
IChangeDataRetriever
INotifyingChangeApplierTarget
SyncCallbacks