自訂提供者的基本原則
Microsoft Sync Framework 包含幾個同步處理案例 (如檔案同步處理) 的提供者,但是在某些情況下則需要自訂提供者。自訂提供者會要求開發人員撰寫比 Sync Framework 中所包含之提供者還要多的程式碼,但是自訂提供者是 Sync Framework 彈性和擴充性的關鍵元件。本主題提供的資訊可幫助您了解自訂提供者,並做出有關適合應用程式之自訂提供者類型的選擇。如果您是 Sync Framework 的新手,建議您閱讀選取適當的 Sync Framework 元件中的<Sync Framework 元件>。
了解提供者、應用程式和中繼資料管理
Microsoft Sync Framework 會使用四個基本元件來同步處理複寫:同步處理執行階段、同步處理工作階段及兩個同步處理提供者。若要同步處理資料,應用程式會建立同步處理工作階段,並傳遞給來源提供者和目的地提供者。此工作階段會使用來源地提供者,以取得在來源複寫上發生的新變更,並使用目的地提供者,將這些變更套用到目的地複寫。提供者會針對要同步處理的每一個複寫和每一個項目維護中繼資料,包括「知識」(Knowledge)。知識是描述已直接或透過同步處理套用至複寫之所有變更的中繼資料。
當 Sync Framework 並未針對要同步處理的資料存放區提供提供者時,必須撰寫自訂提供者。Sync Framework 包括兩個自訂提供者類型的 Managed 和 Unmanaged API:簡單自訂提供者和標準自訂提供者:
由於簡單提供者的介面數較少而且這些介面都很簡單,所以會針對缺少複雜變更追蹤機制的資料存放區提供更快速的開發及更直覺式的支援。
標準提供者會提供最大的彈性和最高層級的效能與強固性。
這兩種提供者都可用來同步處理各種不同的資料存放區,而且也都在重要的方面提供選項,例如篩選和衝突處理。但是,還有一些重要的相異之處。如需詳細資訊,請參閱本主題的<在簡單提供者與標準提供者之間做選擇>。
下圖顯示在同步處理案例中使用的主要元素。此圖類似於選取適當的 Sync Framework 元件中的圖,但是隨附的文字會提供與自訂提供者有關的其他資訊,並顯示資料與中繼資料如何在系統中流動。
下圖中的元素有三種類型:
由開發人員所撰寫的元素。
應用程式會啟動同步處理、回應事件,並根據應用程式的需求處理其他工作。如需詳細資訊,請參閱實作同步處理應用程式。
提供者為複寫管理中繼資料,並使用 Sync Framework 列舉變更及偵測衝突。提供者也會在擔任來源提供者時,使用複寫的資料存放區來傳送項目資料,並在擔任目的地提供者時,套用變更。此提供者是正在同步處理之資料的類型所特有。工作階段中的兩個提供者通常具有相同類型,但這不是絕對必要。如需互通性的詳細資訊,請參閱整合不同提供者的資料。
Managed 程式碼:簡單提供者會實作 FullEnumerationSimpleSyncProvider 或 AnchorEnumerationSimpleSyncProvider。標準提供者會實作 KnowledgeSyncProvider、IChangeDataRetriever 和 INotifyingChangeApplierTarget。
Unmanaged 程式碼:簡單提供者會實作 IFullEnumerationSyncProvider 或 IAnchorSyncProvider。標準提供者會實作 IKnowledgeSyncProvider、ISyncProvider、ISynchronousDataRetriever 和 ISynchronousNotifyingChangeApplierTarget (或者如果是非同步提供者,則為非同步版本)。
資料存放區是您撰寫的提供者所針對的任何存放區。
資料傳輸通訊協定會決定如何在兩個提供者之間傳輸資料變更。
Sync Framework 所提供的元素。
根據使用 Managed 或 Unmanaged 程式碼而定,應用程式會與同步處理協調者 (SyncOrchestrator) 或同步處理工作階段 (ISyncSession) 通訊,然後該項目會與每一個同步處理提供者通訊、驅動同步處理程序,然後將狀態、衝突和錯誤傳達給用戶端應用程式。
同步處理執行階段會幫助提供者執行一般同步處理工作,例如中繼資料管理、衝突偵測和變更應用。
由開發人員所撰寫或 Sync Framework 所提供的元素,視提供者和應用程式需求而定。
中繼資料存放區包含了 Sync Framework 使用的中繼資料,以判斷每一個提供者應該從其服務之資料存放區選取及套用至此存放區的變更。中繼資料存放區可以與此資料存放區不同 (例如不同的檔案或資料庫),或者整合到存放區 (例如資料庫中的額外資料表)。一般來說,同步處理提供者會管理同步處理所需的中繼資料。但是依複寫的實作而定,部分中繼資料管理交由不同的元件處理可能會更有用,例如依排定的時間而不是在同步處理期間清除舊有中繼資料的服務。所需的中繼資料以及其儲存和運作的方式取決於使用哪一個提供者。如需每一個提供者類型之中繼資料需求的詳細資訊,請參閱管理簡單提供者的中繼資料和標準提供者的中繼資料需求。
簡單提供者可保護開發人員,使開發人員幾乎完全無法與中繼資料存放區互動。它會使用隨附於 Sync Framework 的中繼資料儲存服務實作。標準自訂提供者可以使用這個實作或者可以:根據中繼資料儲存服務 API 使用另一個實作,或是將中繼資料儲存在另一個存放區或資料存放區內的完全自訂實作。如需詳細資訊,請參閱管理標準提供者的中繼資料。
在簡單提供者與標準提供者之間做選擇
在大多數情況下,我們建議您使用簡單提供者,但是您應該先了解簡單提供者 API 設計中所做的假設:
要同步處理的資料存放區不支援任何類型的變更追蹤,或者只支援以錨點為基礎的變更追蹤。
錨點是一種物件,可指示上一次同步處理工作階段之後已在資料存放區中變更的項目。在沒有變更追蹤或是只有以錨點為基礎之變更追蹤的存放區中,同步處理知識的更新會發生在同步處理工作階段 (非同步方式),而不是發生於存放區中發生變更時 (同步方式)。如果許多同步處理工作階段同時在特定的複寫上發生,這可能會影響效能。因此,如果應用程式需要高並行方式,而每一個資料存放區都支援同步處理知識的同步更新,請使用標準提供者。
此複寫只需要同步處理一個項目類型。
由於資料存放區限制或應用程式的需求,所以中繼資料必須儲存在資料存放區的外面。
簡單提供者會儲存中繼資料,其方式是使用隨附於 Sync Framework 之中繼資料儲存服務的實作。中繼資料與其描述的資料分開儲存,這樣會有兩個潛在的問題:
如果中繼資料儲存在遠端,則其在同步處理工作階段可能完全無法使用。例如,要同步處理之兩個複寫之間的網路連線可以使用,但是與裝載中繼資料之伺服器的連線則無法使用。
不保證資料和中繼資料之間具有交易一致性。建議您將中繼資料與資料儲存在相同的電腦上,但是除非您使用標準提供者,並將中繼資料存放在資料存放區 (或是使用分散式交易來更新這兩個存放區),否則無法使用交易支援。請注意,標準提供者也可以使用中繼資料儲存服務,但是並非像簡單提供者一樣必須這樣做。
如果應用程式的需求非常適合這些假設,我們建議您使用簡單的提供者。如需簡單提供者的詳細資訊,請參閱實作簡單的自訂提供者。如需標準提供者的詳細資訊,請參閱實作標準的自訂提供者。
了解 Sync Framework 參與者類型
Sync Framework 可以用來在各種不同功能的「參與者」(Participant) 之間同步處理資料。參與者是可與執行 Sync Framework 的其他系統進行同步處理的裝置或服務。
Sync Framework 支援下列參與者類型:
完整參與者
Proxy 參與者
部分參與者
簡單參與者
完整參與者
完整參與者在本機裝載執行階段並儲存中繼資料。完整參與者可以參與點對點同步處理案例,因為兩個參與者都可以啟動同步處理。
點對點同步處理中的兩個完整參與者
部分參與者
部分參與者可以儲存同步處理中繼資料,但不能加以處理。部分參與者依賴一些完整參與者來裝載執行階段,並啟動同步處理。資料可以流過這些參與者,因為它們可以攜帶多重主版同步處理中繼資料,並將中繼資料傳達給其他任何完整參與者。部分參與者無法參與對等案例,因為它們無法處理中繼資料,也無法裝載執行階段。部分參與者的範例包括:有資料儲存功能的 USB 隨身碟和行動電話。
下圖顯示完整參與者 (如電腦) 如何與部分參與者 (如行動電話) 進行同步處理。完整參與者代表部分參與者列舉或篩選變更,並將中繼資料儲存在部分參與者上。這樣可以讓其他任何完整參與者同步處理此部分參與者。
完整參與者與部分參與者同步處理
簡單參與者
簡單參與者不儲存中繼資料、無法存放執行階段,而且可能沒有變更追蹤。簡單參與者要依賴單一完整參與者,執行一切與列舉變更、套用變更,以及操控與儲存中繼資料有關的作業。由於簡單參與者無法儲存中繼資料,只能做為分葉節點與單一完整參與者夥伴合作,由完整參與者和其他任何參與者來回傳輸資料。
下圖顯示完整參與者使用中繼資料儲存服務,為簡單參與者儲存中繼資料,並代表簡單參與者推動同步處理的所有層面。中繼資料存放區是用來追蹤與簡單參與者相關的變更,但由於簡單參與者的儲存限制,存放區是儲存於完整參與者上。
完整參與者使用中繼資料儲存服務同步處理簡單參與者
Proxy 參與者
Proxy 參與者可以處理在本機發出的呼叫,並轉送至遠端提供者 (例如,存放在伺服器上的資料庫),為遠端提供者啟動同步處理。
![]() |
---|
Sync Framework 不提供 Proxy 提供者與遠端提供者之間的驗證或加業作業。若要協助防止未獲授權的存取或竄改,必須使用適當的相互驗證和加密機制,例如安全通訊端層 (Secure Sockets Layer, SSL),保障 Proxy 提供者與遠端提供者之間的通訊通道安全。 |
下圖顯示完整參與者提供者與 Proxy 提供者進行同步處理。請注意,Proxy 提供者只是將命令和中繼資料傳送過網路給遠端提供者。遠端提供者位於資料庫伺服器上,並實作用來進行同步處理的實際邏輯。紅色虛線代表電腦界限。
完整參與者與 Proxy 參與者同步處理
下圖顯示 Sync Framework 如何用來同步處理在啟動同步處理之應用程式遠端的提供者。控制應用程式可以連接必須進行同步處理的兩個 Web 服務或智慧型裝置。請注意,兩個本機提供者對於遠端提供者都是 Proxy 提供者。紅色虛線代表電腦界限。
同步處理兩個 Proxy 參與者的中央應用程式
請參閱
概念
選取適當的 Sync Framework 元件
實作簡單的自訂提供者
實作標準的自訂提供者
實作同步處理應用程式
Sync Framework 範例