用戶端與伺服器同步處理的架構與類別
Sync Framework 會啟用 SQL Server Compact 用戶端資料庫與伺服器資料庫或其他任何資料來源之間的同步處理,例如提供 XML 格式之股價的服務。針對同步處理兩個資料庫,Sync Framework 支援使用任何可使用 ADO.NET 提供者的伺服器資料庫的兩層式和 N 層式架構。針對在用戶端資料庫和其他類型的資料來源之間的同步處理,Sync Framework 支援以服務為基礎的架構。此架構比兩層式及 N 層式架構需要更多的應用程式程式碼,不過它不需要開發人員採取不同的方式來進行同步處理。
下列圖例會顯示涉及兩層式、N 層式以及以服務為基礎的架構的元件。每張圖都會顯示一個用戶端,不過通常有多個用戶端與單一伺服器同步處理。Sync Framework 會將中樞與支點模型用於用戶端和伺服器資料庫同步處理。同步處理一定會由用戶端起始。所有來自每個用戶端的變更,都會在變更從伺服器傳送到其他用戶端之前,先與伺服器進行同步處理 (這些用戶端不會直接與另一個用戶端交換變更)。
Sync Framework 會針對用戶端與伺服器案例提供快照集、僅限下載、僅限上傳和雙向的同步處理:
快照集和僅限下載的同步處理通常用於在用戶端上儲存及更新參考資料,例如產品清單。在伺服器上進行的資料變更,會在同步處理期間下載到用戶端資料庫中。快照集同步處理會在每次用戶端進行同步時,完全重新整理資料。當您不想或伺服器不能追蹤累加變更時,就適用這個方式。僅限下載的同步處理只會下載自上次同步處理之後才發生的累加變更。
僅限上傳的同步處理通常用於在用戶端上插入資料,例如銷售訂單。插入和其他在用戶端資料庫中所進行的資料變更,系統會在同步處理期間上傳到伺服器中。
雙向同步處理通常用於可以在用戶端及伺服器上進行更新的資料,例如客戶連絡資訊。在同步處理期間必須處理所有的衝突變更。
如需同步處理類型的詳細資訊,請參閱 HOW TO:指定快照集、下載、上傳及雙向同步處理。用戶端與伺服器同步處理的 Sync Framework 架構為非對稱式:這表示變更追蹤是內建於用戶端資料庫中,但如果您要讓累加變更進行下載,則必須追蹤伺服器資料存放區中的變更。如需變更追蹤的詳細資訊,請參閱追蹤伺服器資料庫中的變更。
架構圖例中的元件
架構圖中的元件包含用戶端和伺服器資料庫,以及 Sync Framework 資料庫同步處理 API 中的一組類別。N 層式和以服務為基礎的架構也包含了您必須撰寫的 Web 服務和傳輸元件。
兩層式架構
第一張圖例顯示有一個用戶端資料庫和一個伺服器資料庫的兩層式架構。
除了兩個資料庫之外,所有在圖例中的項目都對應到 Sync Framework 類別。這些類別包含在下列 DLL 中:
Microsoft.Synchronization.Data.dll 包含同步代理程式、同步處理資料表,以及同步處理群組。
Microsoft.Synchronization.Data.SqlServerCe.dll 包含用戶端同步處理提供者。
Microsoft.Synchronization.Data.Server.dll 包含伺服器同步處理提供者,以及同步處理配接器 (Adapter)。
所有 DLL 都是以 .NET Framework 2.0 或更新版本中的 System.dll 和 System.Data.dll 做為基礎。Microsoft.Synchronization.Data.SqlServerCe.dll 也會以 SQL Server Compact 的 System.Data.SqlServerCe.dll 為基礎。兩層式應用程式所有的 Sync Framework DLL 都存在於用戶端上。而 N 層式應用程式、Microsoft.Synchronization.Data.dll 以及 Microsoft.Synchronization.Data.Server.dll 則存在於提供同步處理服務的個別電腦當中。
N 層式架構
第二個圖例顯示 N 層式架構。在用戶端及伺服器資料庫之間,它需要一個 Proxy、一個服務,以及一個傳輸機制來進行通訊。此架構比兩層式架構更為常見,因為 N 層式架構在用戶端與伺服器資料庫之間不需要直接連線。
以服務為基礎的架構
第三個圖例顯示以服務為基礎的架構。此架構中包含了用戶端資料庫,但不包含伺服器資料庫、對應的伺服器同步處理提供者,或是同步處理配接器。若要使用這一類的架構,必須要有一個能透過自訂的 Proxy 及服務,與同步代理程式進行通訊的應用程式。它們提供的功能,必須與伺服器同步處理提供者以及同步處理配接器一般會提供的功能相同,例如擷取變更以進行同步處理。
用戶端資料庫
Sync Framework 應用程式的用戶端資料庫是 SQL Server Compact 3.5 SP1 及更新版本 (包括 SQL Server Compact 64 位元版本)。Sync Framework 會提供基礎結構,可在用戶端資料庫中追蹤累加變更。當任何資料庫使用除了快照集之外的同步處理方法進行同步處理時,系統就會初次啟用此基礎結構。根據預設,用戶端資料庫中 Sync Framework 所需要的中繼資料會儲存 10 天。如需中繼資料保留的詳細資訊,請參閱 RetentionInDays。
伺服器資料庫
伺服器資料庫可以是任何可使用 ADO.NET 提供者的資料庫。如果您想在伺服器資料庫中追蹤累加變更,您必須準備要進行這項工作的資料庫。如需詳細資訊,請參閱 追蹤伺服器資料庫中的變更。
Sync Framework 類別
上圖中表示下列類別:SyncAgent、SqlCeClientSyncProvider、DbServerSyncProvider、SyncTable、SyncGroup 和 SyncAdapter。如需如何在應用程式中使用這些類別的範例,請參閱使用者入門:用戶端與伺服器同步處理。
同步代理程式
同步代理程式以下列方式驅動同步處理:
在每個要同步處理的資料表中執行迴圈。
呼叫要擷取的用戶端同步處理提供者,並在用戶端資料庫上套用變更。
呼叫要擷取的伺服器同步處理提供者,並在伺服器資料庫上套用變更。
同步代理程式也能為同步處理維持工作階段層級的資訊,並提供成功訊息、錯誤訊息,以及統計資料給用戶端上的應用程式。如需詳細資訊,請參閱 SyncAgent 和 HOW TO:指定快照集、下載、上傳及雙向同步處理。
用戶端同步處理提供者
用戶端同步處理提供者會與用戶端進行通訊,並讓同步代理程式避開特定用戶端資料庫的實作 (Implementation)。Sync Framework 為 SQL Server Compact 資料庫包含了提供者。用戶端同步處理提供者的主要活動如下:
儲存有關在啟用同步處理的用戶端中資料表的資訊。
擷取自從最後一次同步處理後發生在用戶端資料庫上的變更。
套用累加變更至用戶端資料庫。
偵測衝突變更。
如需詳細資訊,請參閱 SqlCeClientSyncProvider 和 HOW TO:指定快照集、下載、上傳及雙向同步處理。
伺服器同步處理提供者
伺服器同步處理提供者提供與伺服器之間的通訊,並讓同步代理程式避開此伺服器資料庫中的特定實作。伺服器同步處理提供者的主要活動如下:
儲存有關在啟用同步處理的伺服器中資料表的資訊。
讓應用程式能擷取自從最後一次同步處理後發生在伺服器資料庫上的變更。
套用累加變更至伺服器資料庫。
偵測衝突變更。
如需詳細資訊,請參閱 DbServerSyncProvider 和 HOW TO:指定快照集、下載、上傳及雙向同步處理。
同步處理資料表和同步處理群組
同步處理資料表是根據每個進行同步的資料表進行定義。它會儲存設定,例如同步處理的方向。每個用戶端只能要求需要的資料表。這可能不包括所有伺服器同步處理提供者使用的資料表。例如有 20 個資料表,其中 10 個已為伺服器同步處理提供者設定了雙向同步處理。一個用戶端只能要求 12 個資料表,僅限下載。雖然伺服器支援上傳,但是用戶端不需要對所有資料表進行變更或同步。如需詳細資訊,請參閱 SyncTable。
在定義同步處理資料表之後,可以將它加入至同步處理群組。同步處理群組是一個機制,用來確認一組資料表中變更應用程式的一致性。如果資料表包含在同步處理群組中,這些資料表的變更會當做一個單位來傳輸,並在單一交易中套用至伺服器。如果群組中有任何變更失敗,則會在下一次同步處理時重試整個群組的變更。如需詳細資訊,請參閱 SyncGroup 和 HOW TO:指定快照集、下載、上傳及雙向同步處理。
同步處理配接器
同步處理配接器是以 ADO.NET 中的資料配接器為模型,針對每個同步處理的資料表而定義。同步處理配接器提供伺服器同步處理提供者特定的命令,這些命令在與伺服器資料庫之間的互動中是必須的,例如 InsertCommand,它會從用戶端資料庫上套用插入至伺服器資料庫。因為同步處理配接器使用 ADO.NET DbCommand 物件,因此您可以使用 ADO.NET 支援的任何命令結構。包含內嵌 Transact-SQL、預存程序 (Stored Procedure)、檢視、函式等等。命令只需要單一結果,此結果會定義要進行傳輸和套用的結構與資料。如需詳細資訊,請參閱 SyncAdapter 和 HOW TO:指定快照集、下載、上傳及雙向同步處理。
Proxy、服務和傳輸
N 層式和以服務為基礎的架構中使用了 Proxy、服務和傳輸。在 N 層式應用程式中使用了 Microsoft.Synchronization.Data.Server.dll,但它並不位於用戶端上。通常,此 DLL 位於直接連接到伺服器資料庫的中介層 (Middle Tier) 中。在此案例中,需要 Proxy 和服務才能在用戶端和中介層間進行通訊:
在用戶端上,應用程式程式碼參考 Proxy 的伺服器同步處理提供者 (ServerSyncProviderProxy),而非直接參考提供者。Proxy 與服務在中介層上進行通訊。
在中介層上,此服務會繼承 DbServerSyncProvider (ServerSyncProvider 所繼承的抽象類別),並公開 (Expose) 相同的方法。接著,系統會在與伺服器資料庫直接連線處,執行伺服器同步處理提供者的方法。其結果會透過中介層傳送回用戶端。
如需詳細資訊,請參閱HOW TO:設定 N 層式同步處理。
在以服務為基礎的應用程式中,並不會在用戶端上使用 Microsoft.Synchronization.Data.Server.dll。應用程式程式碼必須與伺服器同步處理提供者以及同步處理配接器一般會提供的功能相同:
在用戶端上,應用程式程式碼參考 Proxy,得到處理伺服器同步處理提供者工作的應用程式代碼,例如從資料來源擷取變更。Proxy 與服務在中介層上進行通訊。
在中介層上,此服務會繼承 DbServerSyncProvider (ServerSyncProvider 所繼承的抽象類別),並公開相同的方法。接著,這個方法會由應用程式程式碼在直接連線到伺服器資訊庫處執行。其結果會透過中介層傳送回用戶端。
API 中的其他類別
此主題中的圖例會顯示 API 中的主要類別。不過,還有很多類別是圖例中沒有顯示的。若要取得所有可用類別的詳細資訊,請參閱 Microsoft.Synchronization, Microsoft.Synchronization.Data, Microsoft.Synchronization.Data.SqlServerCe 和 Microsoft.Synchronization.Data.Server。下列章節提供其他四種您應該熟悉的重要類別的介紹。
同步處理錨定
同步處理錨定是一個參考點,指出一組資料表從伺服器上進行同步的時間。同步處理錨定讓應用程式能判斷在特定工作階段中,要同步哪些變更。在同步處理期間,用戶端同步處理提供者會在用戶端資料庫中儲存下列參考點:
- 最後一個接收的錨定
識別從伺服器上最後一次下載的變更。
- 最後一個傳送的錨定
識別從用戶端上最後一次上傳的變更。
在下一個同步處理中,應用程式可利用這些錨定識別下一個變更集的同步處理起始點。如需詳細資訊,請參閱 SyncAnchor 和 追蹤伺服器資料庫中的變更。
同步處理工作階段統計資料
工作階段統計資料是一組由同步代理程式為每個同步處理工作階段所提供的統計資料。這些統計資料包含有關同步處理時間、處理的變更數量,以及所有發生之衝突和例外狀況的資訊。如需詳細資訊,請參閱 SyncStatistics 和 HOW TO:使用事件和程式商務邏輯。
同步處理工作階段變數
工作階段變數是為開發人員所提供的變數,用來做為在伺服器上執行的選取、插入、更新以及刪除命令的參數使用。可以透過許多方法來使用變數:提供對衝突偵測的支援,並避免下載一次以上的變更到用戶端。如需詳細資訊,請參閱 SyncSession 和 HOW TO:使用工作階段變數。
SQL 伺服器同步處理配接器產生器
以 ADO.NET 中的命令產生器為模型,同步處理配接器產生器可協助您開發同步處理命令的程式碼,由伺服器同步處理提供者執行。同步處理配接器產生器會產生 SQL Server 資料庫的 SELECT、INSERT、UPDATE 和 DELETE 陳述式。這些陳述式的基礎,是您所提供的涉及同步處理的資料表的資訊。如需詳細資訊,請參閱 SqlSyncAdapterBuilder 和協助您開發應用程式的工具。