共用方式為


儲存中繼資料入門

中繼資料儲存服務可協助針對代表無法以其他方式儲存同步處理中繼資料之複寫的提供者來儲存同步處理中繼資料。中繼資料儲存服務使用具有少量記憶體和磁碟使用量的輕量型資料庫,可以與提供者一起轉散發,並且非常可靠。

中繼資料儲存服務 API 清楚劃分用來存取中繼資料存放區之介面與方法的中繼資料存放區,以便實作及使用替代的存放區,對於提供者僅會進行最低限度的變更。

注意

中繼資料儲存服務介面是單一執行緒,可以在任何執行緒上進行呼叫。但是多執行緒應用程式在使用這些介面時,必須提供適當的執行緒同步處理。

建立中繼資料存放區

中繼資料儲存服務提供使用輕量型資料庫將中繼資料儲存在檔案中的 API 實作。

Managed 程式碼:中繼資料存放區是以 SqlMetadataStore 物件代表。此物件會擴充 MetadataStore 抽象類別。除了提供基底類別來處理複寫中繼資料和交易以外,SqlMetadataStore 也提供方法來建立或開啟中繼資料存放區本身。若要建立新存放區,請呼叫 CreateStore。若要開啟現有的存放區,請呼叫 OpenStore

Unmanaged 程式碼:中繼資料存放區是以 ISqlSyncMetadataStore 介面物件代表。此物件會擴充 ISyncMetadataStore 介面。除了提供基底介面來處理複寫中繼資料和交易以外,ISqlSyncMetadataStore 也提供方法來建立或開啟中繼資料存放區本身。若要建立 ISqlSyncMetadataStore 物件,請將 CLSID_SyncMetadataStoreIID_ISqlSyncMetadataStore 傳遞給 CoCreateInstance。若要建立新存放區,請呼叫 ISqlSyncMetadataStore::CreateStore。若要開啟現有的存放區,請呼叫 ISqlSyncMetadataStore::OpenStore

Security note安全性附註

中繼資料檔案無法防止未經授權的存取。若要保護中繼資料檔案,包含此檔案的資料夾必須適當加以保護,例如,使用判別存取控制清單 (DACL)。當中繼資料檔案儲存於遠端位置時,中繼資料儲存服務與遠端資料夾之間的通訊通道必須適當加以保護。若要允許使用者刪除中繼資料檔案,建立中繼資料檔案的提供者應該要將它放在使用者可存取的某個位置。當您解除安裝建立中繼資料檔案的提供者時,此提供者必須刪除此中繼資料檔案。

Security note安全性附註

當 Sync Framework 透過遠端機制 (例如 UNC 路徑) 開啟中繼資料檔案時,任何電腦上的任何其他應用程式都無法同時存取此中繼資料檔案,包括儲存中繼資料檔案之電腦上的應用程式。

複寫中繼資料

複寫中繼資料必須先初始化才能使用。複寫中繼資料一次只能針對每個中繼資料存放區初始化一次。如果需要自訂欄位或索引,必須在初始化複寫中繼資料時定義。

Managed 程式碼:透過呼叫InitializeReplicaMetadata,初始化複寫中繼資料。

Unmanaged 程式碼:透過呼叫 ISyncMetadataStore::InitializeReplicaMetadata,初始化複寫中繼資料。

若要存取現有存放區中的複寫中繼資料,必須取得複寫中繼資料物件。每個複寫識別碼都有不同的複寫中繼資料物件。但是請注意,中繼資料儲存服務會透過每個複寫識別碼一次只允許有一個複寫中繼資料物件的方式,保護中繼資料存放區以防範並行更新。如果已經有複寫中繼資料物件的執行個體,針對指定的複寫識別碼,在嘗試開啟此執行個體的處理中,會傳回現有物件的參考。如果已經有複寫中繼資料物件的執行個體,針對指定的複寫識別碼,在嘗試開啟此執行個體之處理以外的處理中,作業嘗試會失敗。

Managed 程式碼:透過呼叫 GetReplicaMetadata,取得複寫中繼資料物件。

Unmanaged 程式碼:透過呼叫 ISyncMetadataStore::GetReplicaMetadata,取得複寫中繼資料物件。

複寫中繼資料物件會提供一些方法,以便存取複寫的中繼資料和包含於複寫內項目的中繼資料。如需詳細資訊,請參閱存取複寫中繼資料

自訂項目欄位

可針對項目中繼資料定義一組自訂欄位,每一個欄位都是由唯一的字串名稱和值所組成。這些欄位可用來存放有關預設項目中繼資料集合所不支援之項目的任何其他中繼資料。這些欄位可透過 ItemMetadata 上的各種方法 (適用於 Managed 程式碼) 或 IItemMetadata (適用於 Unmanaged 程式碼) 來存取。這些欄位及其格式 (包括大小和資料型別) 是在初始化複寫中繼資料時定義。

Managed 程式碼:透過傳遞 FieldSchema 物件給 InitializeReplicaMetadata,指定自訂欄位。

Unmanaged 程式碼:透過傳遞 CUSTOM_FIELD_DEFINITION 物件陣列給 ISyncMetadataStore::InitializeReplicaMetadata,指定自訂欄位。

索引結構描述

您可以定義一組索引結構描述,以便使用自訂欄位集合當做索引,更有效率地尋找中繼資料存放區內的項目。索引結構描述可定義為唯一的項目,以確保此索引會定義單一項目。索引結構描述內所包含的每一個欄位也必須存在於為此複寫所定義的自訂欄位結構描述中。

Managed 程式碼:透過傳遞 IndexSchema 物件給 InitializeReplicaMetadata,指定索引結構描述。

Unmanaged 程式碼:透過傳遞 CUSTOM_FIELDS_INDEX 物件陣列給 ISyncMetadataStore::InitializeReplicaMetadata,指定索引結構描述。

交易

交易是隱含或明確地存在。只有從中繼資料存放區讀取資料,才支援隱含交易。事先未啟動明確交易就嘗試寫入中繼資料存放區,將擲回 ExplicitTransactionRequiredException (適用於 Managed 程式碼) 或傳回 SYNC_E_METADATA_ACTIVE_TRANSACTION_REQUIRED (適用於 Unmanaged 程式碼)。

若要使用 Managed 程式碼設定中繼資料

  1. 呼叫 BeginTransaction,啟動明確交易。呼叫 CommitTransaction,認可交易期間進行的變更。呼叫 RollbackTransaction,捨棄交易期間進行的變更。

  2. ReplicaMetadataItemMetadata 物件上設定屬性。

  3. 使用 SaveReplicaMetadataSaveItemMetadata,儲存屬性。

若要使用 Unmanaged 程式碼設定中繼資料

  1. 呼叫 ISyncMetadataStore::BeginTransaction,啟動明確交易。呼叫 ISyncMetadataStore::CommitTransaction,認可交易期間進行的變更。呼叫 ISyncMetadataStore::RollbackTransaction,捨棄交易期間進行的變更。

  2. IReplicaMetadataIItemMetadata 物件上設定屬性。

  3. 使用 IReplicaMetadata::SaveReplicaMetadataIReplicaMetadata::SaveItemMetadata,儲存屬性。

注意

此交易服務只適用於儲存於中繼資料存放區內的中繼資料。儲存於複寫上項目資料存放區內的任何項目資料都不包含於此交易中。

請參閱

參考

ISqlSyncMetadataStore 介面
CUSTOM_FIELD_DEFINITION 結構
IReplicaMetadata 介面
IItemMetadata 介面
CUSTOM_FIELDS_INDEX 結構
SqlMetadataStore
FieldSchema
ReplicaMetadata
ItemMetadata
IndexSchema

其他資源

Sync Framework Metadata Storage Service