部署及版本設定應用程式
本主題描述用戶端與伺服器應用程式的部署和版本設定。如需初始化對等資料庫的詳細資訊,請參閱 HOW TO:設定及執行共同作業同步處理 (非 SQL Server)中的<初始化伺服器資料庫>。
您部署使用 Sync Framework 之用戶端與伺服器應用程式的方式取決於應用程式是兩層式或 N 層式。在兩層式應用程式中,所有同步處理程式碼都在用戶端上,而應用程式可以像以 SQL Server Compact 為基礎的其他應用程式一樣進行部署。一般來說,部署涉及使用 ClickOnce 發行應用程式,或封裝應用程式,然後複製至每個用戶端。如需如何部署使用 SQL Server Compact 之應用程式的詳細資訊,請參閱《SQL Server Compact 線上叢書》中的<部署應用程式>和<HOW TO:建置應用程式並部署至桌面>。在 N-Tier 應用程式中,您也必須部署程式碼至裝載伺服器端同步處理元件的電腦上。
建立及初始化用戶端資料庫
對於兩層式和 N-Tier 應用程式,您必須決定如何建立及初始化用戶端資料庫,此資料庫具有應用程式所需的結構描述和資料。主要做法有兩種:
使用 Sync Framework 建立資料庫,並在第一次同步處理期間,下載資料表結構描述和資料。這是最簡單的做法。但是如果您有許多用戶端和大批資料集,可能需要大量的網路流量和伺服器處理。
預先建立具有資料表結構描述和初始資料集的資料庫。以 .sdf 檔案形式存在的資料庫可以由用戶端應用程式進行傳輸或下載。如果應用程式下載累加變更,就可以在第一次同步處理期間讓用戶端資料庫包含最新資料。如果您採用這種做法,請為 CreationOption 屬性設定適當的值。
如果應用程式包含上傳,而您想要知道引發變更的起點,應用程式可以設定 ClientId 屬性,以便向伺服器唯一識別用戶端資料庫,或者 Sync Framework 將為資料庫產生新識別碼。
注意
預先建立用戶端資料庫不適合用於資料以不同方式在每個用戶端進行篩選的應用程式。它可能會在初始同步處理期間導致漏失變更。
如需如何初始化用戶端資料庫的詳細資訊,請參閱 HOW TO:初始化用戶端資料庫及使用資料表結構描述。
應用程式版本設定
開發並部署應用程式之後,可能會開發新版本應用程式。應用程式版本設定要考慮兩大方面:
受新版本影響的應用程式部分
新版本是否必須與舊版本共存
一般來說,Sync Framework 比較容易更新 N-Tier 應用程式,因為您可以分別更新伺服器端元件與用戶端元件。這可以讓您公開包含已更新功能的新服務,並讓用戶端避免從伺服器端變更,直到準備就緒可讓用戶端元件進行更新為止。
N-Tier 應用程式版本設定
對 Sync Framework 來說,應用程式更新主要考量是伺服器資料庫的結構描述變更,Sync Framework 不會自動將結構描述變更從伺服器傳播到用戶端。但是只要您更新應用程式的適當部分,它確實支援結構描述變更。如需用戶端資料庫中支援的結構描述變更清單,請參閱使用資料表結構描述。如果在伺服器資料庫中進行結構描述變更,應該先決定是否必須傳播至用戶端。例如,如果加入信用卡資料行至伺服器資料庫的資料表中,但您有一條商務規則 (Business Rule),不准員工離線使用信用卡資訊,您就不必將結構描述變更傳播至用戶端。如果您決定要傳播結構描述變更,則處理方式就取決於變更的類型。
一般結構描述變更
最常見的兩個結構描述變更是加入資料行至現有資料表,以及加入新資料表,或是決定包含原本不是應用程式一部分的現有資料表。如果應用程式要求新資料表要進行同步處理,您必須為該資料表加入 SyncAdapter。更新伺服器元件之後,用戶端應用程式或應用程式使用者可以決定是否同步處理新資料表。如果決定是要同步處理新資料表,用戶端元件必須變更,以包含新資料表的 SyncTable。這些變更必須以某種方式推送至每個用戶端應用程式,ClickOnce 技術可以讓您發行應用程式更新,而應用程式可以在開始之前檢查任何更新。如果您加入新資料行至資料表,而且想要讓該資料行進行同步處理,您必須將資料行加入至用戶端資料庫,並更新用來同步處理變更的命令。如果是加入新資料行之外的結構描述變更,則要卸除用戶端上的資料表,並使用 Sync Framework 或其他機制重新建立資料表。
共存的版本
在某些案例中,新舊版用戶端應用程式可能必須共存。在此情況下,您可以採取兩種不同的做法:
維持多種版本的伺服器元件,以便舊版用戶端元件可以繼續存取適當版本的伺服器元件。版本設定的最佳做法是公開含已更新功能的新服務。用戶端可以使用 ClickOnce 技術進行升級。升級完成以後,用戶端會重新導向至新 Web 服務。
設計用戶端和伺服器元件,使用應用程式版本參數。這種做法可以讓用戶端應用程式通知伺服器,它所預期的版本。請考慮下列範例,在其中從伺服器選取插入項目的預存程序會接受
@appversion
參數。參數是加入至 SelectIncrementalInsertsCommand,然後使用 SyncAgent 中的 SyncParameter 提供值。發生同步處理時,應用程式版本會傳送至伺服器,而預存程序會選取正確版本的資料表結構描述。this.Configuration.SyncParameters.Add( new SyncParameter("@appversion", 1)); customerIncrUpdates.Parameters.Add("@appversion", SqlDbType.Int); Me.Configuration.SyncParameters.Add( _ New SyncParameter("@appversion", 1)) customerIncrUpdates.Parameters.Add("@appversion", SqlDbType.Int); CREATE PROCEDURE usp_CustomerSelectIncrementalInserts( @sync_last_received_anchor timestamp, @sync_new_received_anchor timestamp, @appversion int ) AS IF @appversion = 1 BEGIN SELECT CustomerId, CustomerName, SalesPerson FROM Sales.Customer WHERE InsertTimestamp > @sync_last_received_anchor AND InsertTimestamp <= @sync_new_received_anchor END ELSE IF @appversion = 2 BEGIN SELECT CustomerId, CustomerName, SalesPerson, CustomerType FROM Sales.Customer WHERE InsertTimestamp > @sync_last_received_anchor AND InsertTimestamp <= @sync_new_received_anchor END ELSE BEGIN PRINT('Unrecognized version') RETURN END