Microsoft Sync Framework 通過預創建提供程序或編寫新的自定義提供程序,包含將應用程序集成到離線或基于協作網絡所需的所有組件。無論采用的是哪種網絡或設備類型,提供程序均使任何數據源能夠參與數據同步。
Microsoft Sync Framework 是為應用程序、服務和設備啟用協作和離線方案的綜合性同步平臺。它的特色在于提供了能夠漫游、共享和離線提取數據的技術和工具。通過使用 Microsoft Sync Framework,開發人員可以構建同步生態系統,該生態系統能夠將任何應用程序與任一網絡的任意數據集成,無論它們存儲在何處,使用何種協議。
Microsoft Sync Framework 最重要的功能是創建自定義同步提供程序。提供程序是代表同步副本的軟件組件。副本是將要進行同步的特殊信息倉庫,例如手持設備的文件系統。當代表數據源時,提供程序枚舉其副本的變化。當代表目的端時,提供程序將變化應用于副本。如果源端和目的端數據在類型或架構方面存在差異,則每個提供程序都將執行各種必需的映射或轉換。
Microsoft Sync Framework 包括大量支持常見數據源的提供程序。盡管您可以為這些數據源編寫自定義提供程序,但建議您盡可能地使用 Microsoft Sync Framework 提供的提供程序。因為這樣能夠將開發時間減到最少,并使您能夠重用經過測試的現成代碼。
開發人員最終能夠使用所提供的所有提供程序,或創建自定義提供程序在設備和應用程序之間交換信息。
包括下列提供程序:
ADO.NET 同步服務:用于同步啟用 ADO.NET 的數據源
文件系統同步服務:用于同步文件和文件夾
SSE 同步服務:用于同步簡單共享擴展 (SSE),如 RSS 源和 ATOM 源
開發人員最終能夠使用所提供的所有提供程序,或創建自定義提供程序在設備和應用程序之間交換信息。
Microsoft Synchronization Framework核心組件:
在使用 Microsoft Sync Framework 實現同步之前,我們需要首先了解同步提供程序的關鍵組件。將在本文檔后面的同步示例中進一步說明這些概念。
下圖顯示了提供程序如何與數據源進行通信并從元數據存儲中檢索狀態信息。這些提供程序依次通過同步會話與其他提供程序進行通信。
數據源
數據源是指存儲所有需要同步的信息的位置。數據源可以是關系數據庫、文件系統、Web 服務,甚或一系列業務應用程序中包含的自定義數據源。凡是能夠以編程方式訪問的數據都可以參與同步。
元數據
提供程序的基本特征在于它能夠存儲有關數據存儲以及該數據存儲中與狀態和更改信息相關的對象的信息。元數據可以存儲在任意位置,無論它是文件、數據庫還是現有的副本數據存儲。為方便起見,Microsoft Sync Framework 提供一個以 SQL Server Compact Edition 為基礎的完整元數據存儲實現。該存儲并非必要,但使用它意味著您不必擔心如何存儲同步元數據。
用于數據存儲的元數據可以分為三個主要組件:
版本: 為每個同步項目存儲少量信息,稱為項目版本。該信息記錄了項目在何時何處發生變化,以及與該項目關聯的項目 ID。在數據庫示例中,一個項目可能是表中的整行。一個項目也可能是表中某行的一列。
當項目發生更改時,存儲的有關該更改的信息將包括創建版本 和更新版本。這些版本包含兩個組件:a 滴答計數 它是一個在整個源范圍內使用以唯一標識一個更改的邏輯時鐘,以及一個副本 ID 它用于唯一標識發生更改的數據存儲。當首次創建項目時,創建版本與更新版本相同。對該項目的后續更新修改的只是更新版本。
必須至少在項目級別上跟蹤所有的更改。換句話說,每個項目必須具備獨立的版本。 在某些情況中需要更大力度的跟蹤以減少潛在的數據沖突(兩位用戶在不同的副本上更新相同的項目)。這種方法的弊端在于它增加了需要存儲的更改跟蹤信息量。
兩種主要的版本實現方式是:
內聯跟蹤:在這種方法中,項目的更改跟蹤信息在做出更改時更新。以數據庫為例,可能會使用觸發器在更新行之后立即更新更改跟蹤表。
異步跟蹤:在這種方法中,將運行外部進程來掃描更改。發現的任何更新將添加到版本信息當中。該進程可能是定期執行進程的一部分,或者它可能在同步之前執行。該進程通常用于當沒有內部機制能夠在項目更新時自動更新版本信息的情況中(例如,無法在更新流程中增加版本更新邏輯)。檢查更改的常用方式是存儲項目的狀態,并將存儲的狀態與項目當前狀態進行比較。例如,可檢查從上次同步起,最后寫入時間或文件大小是否發生變化。
知識: 知識是副本能夠感知的數據更改的簡約表述。知識的目的在于使同步更加有效,因為它有助于限制在副本之間發送的信息量。當版本信息更新時,用于數據存儲的知識也隨之更新。提供程序使用副本知識的目的有:
枚舉更改:確定另一個副本沒有感知的更改。
檢測沖突:確定哪項操作是在不了解彼此知識的情況下做出的。
Tombstones: 每個副本還必須為每個刪除的項目維護tombstone 信息。如果不跟蹤刪除信息,提供程序將無法告知某個項目(如文件)已被刪除。在這種情況下,提供程序無法將更改版本信息傳播至其他提供程序。Tombstone 必須包含以下信息:
因為 tombstone 日志中的信息將隨時間增加,所以有必要創建一個進程定期清理該存儲。清理 tombstone 數據能夠節省空間并且有助于改善同步性能。Microsoft Sync Framework 支持管理 tombstone 信息。
全局 ID: 用于在所有副本中唯一確定 tombstone 項目的副本 ID 和滴答計數。
刪除版本: 與 tombstone 項目關聯的更新版本
創建版本: 最初創建項目時關聯的副本 ID 和滴答計數
同步流程:
發起同步的副本稱為源 而源所連接的副本稱為目標。本文接下來的部分將介紹下圖所示的同步流程。對于雙向同步,將執行此進程兩次,第二次迭代時會交換源和目標。
目標端發起同步會話
在這一階段將建立同步會話,從而創建了從源到提供程序的鏈接。
目標準備并發送知識
如前所述,每個副本都會存儲其自身的知識。存儲在目標端的知識將傳遞到源。
目標知識用于確定要發送的更改
在源端,會將剛剛收到的知識與本地項目版本進行比較,以確定目標端尚不了解的項目。值得注意的是,發送的版本并不是實際的項目,而是每個項目上次發生更改的位置摘要。
更改版本和發往目標端的源知識
當源準備好所需的更改版本列表之后,這些版本將傳輸到目標端
檢索更改項目的本地版本并與源版本和知識進行比較
目標端使用這些版本準備源需要發送的項目列表。目標還使用該信息檢測是否存在限制沖突。限制沖突是指違反了項目限制,如文件夾關系或文件系統中同名數據的位置。
檢測并解決或推遲沖突
基本上,如果在兩次同步期間對兩個副本上的相同項目進行更改就會發生沖突。在 Microsoft Sync Framework 運行時中,當其中一個副本的更改版本不包含另一個副本更改的知識時便會檢測到沖突。 將在下面的“沖突示例”部分中介紹了說明該檢測過程如何工作的更加詳細的示例。
副本可以自由實施各種策略,解決同步拓撲間發生沖突的項目。下面列舉了一些常用的沖突解決策略:
源獲勝: 當檢測到沖突時,總是采用源副本所做的更改。
目標獲勝: 總是采用目標副本所做的更改。
合并: 將源副本和目標副本所做的更改合并在一起。庫存統計可能是一個您希望將兩個副本的值合并(求和),而不是選取其中一個作為正確值的例子。
記錄沖突: 記錄或推遲沖突。
目標向源請求項目數據
在這一階段,目標已經確定需要在源中檢索的項目,并將請求發送到源。
源準備并發送項目數據
源接收到項目數據請求,并準備要傳輸到目標的實際數據。如果要跟蹤的項目是數據庫中的一行,則將發送該行。如果項目是文件夾中的文件,則將傳送該文件。
項目應用到目標中
目標接收并應用項目。如果在此過程中出現任何錯誤(如網絡斷開),則該項目將被標記為異常,并在下次同步期間進行更正。從源接收的知識將添加到目標知識。