共用方式為


彈性識別碼

彈性識別碼是用來識別複寫、項目或變更單位。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 結構。

階層資料的特殊考量

如果要同步處理的項目具有階層,最好是在識別碼加上一個單純遞增數字 (例如時間) 的前置字元。由於父系一般都是在子系之前建立,父系會較早出現於列舉順序中。這可以讓提供者將處理脫出套用順序的項目需求減到最低。

下面說明指派階層資料之全域識別碼的一種做法:

  1. 建立夠大的計數器,可將索引納入複寫中所有唯一項目。

  2. 從範圍的源頭開始,以深度為主,寬度其次,在系統中往返。

  3. 為每一個項目 (父系或子系) 產生 GUID。

  4. 用掛鐘時間做為 GUID 的前置字元。

所建立的新項目可以使用相同的方法指派全域識別碼,而與其容器或個別巢狀項目無關。

Unmanaged 程式碼中的記憶體處理

識別碼是以位元組陣列的指標表示。因此,對於固定長度識別碼,將正在使用的識別碼轉型為位元組指標就夠了。對於可變長度識別碼,則識別碼資料必須用緩衝大小做為前置字元,就像在 SYNC_ID 結構中一樣。

注意

Sync Framework 永遠都不會維護由呼叫者所配置的識別碼參考。如果 Sync Framework 必須保存識別碼,會自行為識別碼配置記憶體,並在內部複製識別碼。呼叫者需負責配置及釋出與識別碼相關聯的記憶體。

Unmanaged 程式碼中識別碼做為傳回值

可變長度識別碼是從兩次呼叫處理中的 Sync Framework 方法傳回:

  1. 呼叫該方法是要判斷識別碼的大小。

  2. 呼叫者配置記憶體,並再次呼叫函式,這次會提供新配置的緩衝區及其大小。

使用者可以透過配置正確大小的緩衝區,或配置最大大小緩衝區,讓此處理最佳化。在此情況下,就不必進行第一次呼叫,不過呼叫者一定都要驗證傳回的 HRESULT,以確保緩衝區是正確大小。

傳回固定長度識別碼的方法不必使用兩步驟處理,方法只要提供正確長度的緩衝區就行了。要求固定長度識別碼的大小參數是選用性的 (可能會提供 NULL)。如果傳入大小,方法的行為就如可變長度識別碼中一樣。也就是說,如果是小於傳回的識別碼大小,就會有錯誤碼指出會傳回更多可用資料,而大小變數會儲存所需大小;如果是大於所需大小,方法就會成功,並傳回所需大小。

範圍

可參考已排序識別碼區塊做為範圍。範圍會使用識別碼下限和上限做為範圍的封閉界限。

Managed 程式碼:範圍界限會直接傳遞給使用範圍的方法。

Unmanaged 程式碼:範圍是使用 SYNC_RANGE 結構表示。

請參閱

參考

ID_PARAMETERS 結構
ID_PARAMETER_PAIR 結構
SYNC_ID 結構
SYNC_RANGE 結構
SyncIdFormatGroup
SyncIdFormat
SyncId

概念

中繼資料管理
中繼資料需求