彈性識別碼
彈性識別碼是用來識別複寫、項目或變更單位。Sync Framework 支援下列彈性識別碼類型:
固定長度識別碼
固定長度識別碼每次使用時一定都是相同的長度。長度必須在識別碼格式結構描述中指定。
可變長度識別碼
可變長度識別碼在每次使用時可能會改變長度。最大長度是在識別碼格式結構描述中指定。
Managed 程式碼:識別碼是以 SyncId 類別表示。此類別包含識別碼,以及指出識別碼是否為可變長度的值。
Unmanaged 程式碼:識別碼是以位元組陣列表示。可變長度識別碼是以 SYNC_ID 結構表示。此結構包含識別碼的長度和以位元組陣列表示的識別碼。
識別碼結構描述
識別碼格式是在結構描述中指定,此結構描述指定有關系統中每個識別碼的下列資訊:
識別碼是固定長度或可變長度。
固定長度識別碼的大小,或可變長度識別碼的大小上限。
Managed 程式碼:識別碼格式結構描述是使用 SyncIdFormatGroup 類別指定。
Unmanaged 程式碼:識別碼格式結構描述是使用 ID_PARAMETERS 結構指定。
此結構描述必須提供給各種不同的 Sync Framework 方法,且用來確保所有物件都使用相同的識別碼結構描述資訊。
在同步處理工作階段中,兩個提供者都會進行結構描述查詢。然後比較結構描述,以驗證兩個提供者都使用相同的結構描述。如果驗證失敗,就不會建立工作階段。
Managed 程式碼:工作階段會使用 IdFormats 屬性,取得提供者的結構描述。
Unmanaged 程式碼:工作階段會使用 ISyncProvider::GetIdParameters 方法,取得提供者的結構描述。
注意
傳遞給 Sync Framework 方法的識別碼格式必須與識別碼格式結構描述中指定的相符,否則方法會失敗。
建議使用的全域識別碼格式
同步處理範圍中每個項目都需要全域識別碼,而且在同步處理社群之間必須是唯一的。全域識別碼是彈性靈活的識別碼,所以可以使用任何格式。但是由於中繼資料可以將識別碼的已排序群組表示為單一範圍,當識別碼是列舉為已排序群組時,中繼資料會更精簡。使用範圍也讓中繼資料維護更有效率。因此,讓識別碼的順序在邏輯上符合利於列舉的順序可能會很有用。針對全域識別碼的格式,建議您使用 16 位元組 GUID 加上 8 位元組前置字元,例如 Managed SyncGlobalId 類別或 Unmanaged SYNC_GID 結構。
階層資料的特殊考量
如果要同步處理的項目具有階層,最好是在識別碼加上一個單純遞增數字 (例如時間) 的前置字元。由於父系一般都是在子系之前建立,父系會較早出現於列舉順序中。這可以讓提供者將處理脫出套用順序的項目需求減到最低。
下面說明指派階層資料之全域識別碼的一種做法:
建立夠大的計數器,可將索引納入複寫中所有唯一項目。
從範圍的源頭開始,以深度為主,寬度其次,在系統中往返。
為每一個項目 (父系或子系) 產生 GUID。
用掛鐘時間做為 GUID 的前置字元。
所建立的新項目可以使用相同的方法指派全域識別碼,而與其容器或個別巢狀項目無關。
Unmanaged 程式碼中的記憶體處理
識別碼是以位元組陣列的指標表示。因此,對於固定長度識別碼,將正在使用的識別碼轉型為位元組指標就夠了。對於可變長度識別碼,則識別碼資料必須用緩衝大小做為前置字元,就像在 SYNC_ID 結構中一樣。
注意
Sync Framework 永遠都不會維護由呼叫者所配置的識別碼參考。如果 Sync Framework 必須保存識別碼,會自行為識別碼配置記憶體,並在內部複製識別碼。呼叫者需負責配置及釋出與識別碼相關聯的記憶體。
Unmanaged 程式碼中識別碼做為傳回值
可變長度識別碼是從兩次呼叫處理中的 Sync Framework 方法傳回:
呼叫該方法是要判斷識別碼的大小。
呼叫者配置記憶體,並再次呼叫函式,這次會提供新配置的緩衝區及其大小。
使用者可以透過配置正確大小的緩衝區,或配置最大大小緩衝區,讓此處理最佳化。在此情況下,就不必進行第一次呼叫,不過呼叫者一定都要驗證傳回的 HRESULT,以確保緩衝區是正確大小。
傳回固定長度識別碼的方法不必使用兩步驟處理,方法只要提供正確長度的緩衝區就行了。要求固定長度識別碼的大小參數是選用性的 (可能會提供 NULL)。如果傳入大小,方法的行為就如可變長度識別碼中一樣。也就是說,如果是小於傳回的識別碼大小,就會有錯誤碼指出會傳回更多可用資料,而大小變數會儲存所需大小;如果是大於所需大小,方法就會成功,並傳回所需大小。
範圍
可參考已排序識別碼區塊做為範圍。範圍會使用識別碼下限和上限做為範圍的封閉界限。
Managed 程式碼:範圍界限會直接傳遞給使用範圍的方法。
Unmanaged 程式碼:範圍是使用 SYNC_RANGE 結構表示。
請參閱
參考
ID_PARAMETERS 結構
ID_PARAMETER_PAIR 結構
SYNC_ID 結構
SYNC_RANGE 結構
SyncIdFormatGroup
SyncIdFormat
SyncId