Sync Framework 核心元件
從 Unmanaged 語言可以使用 Sync Framework 核心元件來執行同步處理。這些元件可以用來管理中繼資料和建立同步處理提供者與應用程式。
結構、列舉型別和旗標
下表列出 Sync Framework 定義的結構、列舉型別和旗標集,並列出通常與每個元件相關聯的功能。
元件 | 相關聯的功能 |
---|---|
中繼資料 |
|
中繼資料 |
|
篩選 |
|
中繼資料 |
|
中繼資料 |
|
中繼資料 |
|
工作階段 |
|
中繼資料 |
|
變更套用服務 |
|
條件約束衝突 |
|
並行衝突 |
|
條件約束衝突 |
|
篩選 |
|
篩選 |
|
中繼資料 |
|
條件約束衝突 |
|
復原同步處理 |
|
應用程式回呼 |
|
應用程式回呼 |
|
並行衝突 |
|
變更套用 |
|
版本設定 |
|
中繼資料 |
|
中繼資料 |
|
篩選 |
|
中繼資料 |
Sync Framework 實作的介面
下列介面是由 Sync Framework 實作。
Factory 介面
下列介面主要用於建立其他 Sync Framework 元件。這些介面的每一個都可以透過將 CLSID_SyncServices 和指定的 IID 傳遞至 CoCreateInstance 來建立。
介面 | IID |
---|---|
IID_IApplicationSyncServices |
|
IID_IClockVectorServices |
|
IID_IProviderCustomFilteredSyncServices |
|
IID_IProviderFilteredSyncServices |
|
IID_IProviderFilteredSyncServices2 |
|
IID_IProviderSyncServices |
|
IID_IProviderSyncServices2 |
變更批次介面
下列介面代表變更批次。每個介面都可以透過將指定的 IID 傳遞至其他任何介面的 QueryInterface 方法來取得。符合指定的條件時,只會實作某些介面。
介面 | IID | 條件 |
---|---|---|
IID_ISyncChangeBatch |
變更批次不能屬於復原同步處理的一部分。 |
|
IID_ISyncChangeBatch2 |
永遠。 |
|
IID_ISyncChangeBatchAdvanced |
永遠。 |
|
IID_ISyncChangeBatchBase |
永遠。 |
|
IID_ISyncChangeBatchBase2 |
永遠。 |
|
IID_ISyncChangeBatchWithFilterKeyMap |
永遠。 |
|
IID_ISyncChangeBatchWithPrerequisite |
永遠。 |
|
IID_ISyncFullEnumerationChangeBatch |
變更批次必須屬於復原同步處理的一部分。 |
|
IID_ISyncFullEnumerationChangeBatch2 |
變更批次必須屬於復原同步處理的一部分。 |
下列介面代表單一變更。每個介面都可以透過將指定的 IID 傳遞至其他任何介面的 QueryInterface 方法來取得。
介面 | IID |
---|---|
IID_ISyncChange |
|
IID_ISyncChangeWithFilterKeyMap |
|
IID_ISyncChangeWithPrerequisite |
|
IID_ISyncFullEnumerationChange |
|
IID_ISyncMergeTombstoneChange |
下列介面用來將其他資訊加入至 ISyncChange 物件。每個介面都可以使用指定的機制取得。
介面 | 取得方式 |
---|---|
將 IID_IFilterTrackingSyncChangeBuilder 傳遞至 ISyncChangeBuilder 物件的 QueryInterface 方法。 |
|
透過各種方法傳回,例如 ISyncChangeBatchBase::AddItemMetadataToGroup。 |
下列介面用來處理變更單位。每個介面都可以使用指定的機制取得。
介面 | 取得方式 |
---|---|
呼叫方法,例如 ISyncChange::GetChangeUnits。 |
下列介面用來建立或列舉變更的清單。每個介面都可以使用指定的機制取得。
介面 | 取得方式 |
---|---|
呼叫 IProviderSyncServices::CreateDestinationChangeVersionsBuilder。 |
|
將 IID_IDestinationChangeVersionsBuilder2 傳遞至 IDestinationChangeVersionsBuilder 物件的 QueryInterface 方法。 |
|
呼叫 ISyncChangeBatchBase::GetChangeEnumerator 或 IDestinationChangeVersionsBuilder::GetChangeEnumerator。 |
|
將 IID_IFilterTrackingSyncChangeBuilder 傳遞至 IDestinationChangeVersionsBuilder 物件的 QueryInterface 方法。 |
變更套用者介面
下列介面可由目的地提供者用來協助處理衝突及套用變更。
下表中的任何介面都可以透過將指定的 IID 傳遞至 IProviderSyncServices::CreateChangeApplier 方法或表格中其他任何介面的 QueryInterface 方法來取得。
介面 | IID |
---|---|
IID_IAsynchronousNotifyingChangeApplier |
|
IID_ISynchronousNotifyingChangeApplier |
|
IID_ISynchronousNotifyingChangeApplier2 |
變更套用者會透過呼叫 IAsynchronousNotifyingChangeApplierTarget::RegisterCallback,向目的地提供者註冊下列介面。
介面 | IID |
---|---|
IID_IAsynchronousNotifyingChangeApplierTargetCallback |
在衝突偵測與變更應用程式期間,下列介面用於在變更套用者與提供者之間進行通訊。每個介面都可以使用指定的機制取得。
介面 | 取得方式 |
---|---|
將 IID_IFilterTrackingSaveChangeContext 傳遞至 ISaveChangeContext 或 ISaveChangeWithChangeUnitsContext 物件的 QueryInterface 方法。 |
|
呼叫 IProviderSyncServices::CreateRecoverableErrorData、IRecoverableError::GetRecoverableErrorDataForChange 或 IRecoverableError::GetRecoverableErrorDataForChangeUnit。 |
|
傳遞至 ISynchronousNotifyingChangeApplierTarget::SaveChange 和 IAsynchronousNotifyingChangeApplierTarget::SaveChange。 |
|
將 IID_ISaveChangeContext2 傳遞至 ISaveChangeContext 物件的 QueryInterface 方法。 |
|
傳遞至 ISynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits 和 IAsynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits。 |
|
將 IID_ISaveChangeWithChangeUnitsContext2 傳遞至 ISaveChangeWithChangeUnitsContext 物件的 QueryInterface 方法。 |
|
需要更大的彈性時,可以使用下列介面來代替標準變更套用者。每個介面都是使用指定的機制取得。
介面 | 取得方式 |
---|---|
將 IID_IChangeApplicationServices 傳遞至 IProviderSyncServices::CreateChangeApplier。 |
衝突記錄
下列介面用來記錄衝突。每個介面都可以使用指定的機制取得。
介面 | 取得方式 |
---|---|
可以透過提供者實作,或者透過將 IID_IConflictLogAccess 傳遞至 IMemoryConflictLog 物件的 QueryInterface 方法來取得。 |
|
可以透過提供者實作,或者透過將 IID_IConflictLogWriter 傳遞至 IMemoryConflictLog 物件的 QueryInterface 方法來取得。 |
|
呼叫 IProviderSyncServices2::CreateLoggedConflictsEnumBuilder。 |
|
篩選
下列介面表示控制包含在同步處理範圍之資料所使用的篩選相關資訊。每個介面都可以使用指定的機制取得。
介面 | 取得方式 |
---|---|
將 SYNC_FILTER_INFO_FLAG_CHANGE_UNIT_LIST 旗標傳遞至 IProviderFilteredSyncServices::CreateFilterInfo,然後將 IID_IChangeUnitListFilterInfo 傳遞至傳回之 ISyncFilterInfo 物件的 QueryInterface 方法。 |
|
呼叫 IProviderCustomFilteredSyncServices::CreateCombinedFilterInfo。 |
|
呼叫 IProviderCustomFilteredSyncServices::CreateCustomFilterInfo。 |
|
呼叫 IProviderCustomFilteredSyncServices::CreateFilterKeyMap 或 ISyncChangeBatchWithFilterKeyMap::GetFilterKeyMap。 |
|
將 IID_ISyncFilterInfo2 傳遞至 ISyncFilterInfo 物件的 QueryInterface 方法。 |
知識中繼資料
下列介面代表知識物件。表格中的任何介面都可以透過將指定的 IID 傳遞至表格中其他任何介面的 QueryInterface 方法來取得。請注意,當知識物件的最小支援版本不是預期的值 (例如 ISyncKnowledge::GetSingleItemExceptions,也就是當最小支援版本不是 SYNC_SERIALIZATION_VERSION_V1 時會失敗) 時,某些介面上的某些方法會失敗。同時,某些方法將會變更最小支援版本,例如 IKnowledgeWithMarkers::AddAllChangeUnitsRequiredMarker,這會將最小支援版本設定為 SYNC_SERIALIZATION_VERSION_V3。如需必要或設定之最小支援版本的詳細資訊,請參閱每個方法的參考文件集。
介面 | IID |
---|---|
IID_ISyncKnowledge |
|
IID_ISyncKnowledge2 |
|
IID_IKnowledgeWithMarkers |
|
IID_IForgottenKnowledge |
下列介面代表知識物件的元件,這個知識物件的最小支援版本為 SYNC_SERIALIZATION_VERSION_V1。知識物件的最小支援版本可透過呼叫 ISyncKnowledge2::GetMinimumSupportedVersion 來取得。每個介面都可以透過呼叫指定的方法來取得。
介面 | 透過呼叫下列方法取得 |
---|---|
下列介面代表知識物件所有版本的元件。每個介面都可以透過呼叫指定的方法來取得。
介面 | 透過呼叫下列方法取得 |
---|---|
ISyncKnowledge::FindClockVectorForItem 或ISyncKnowledge::FindClockVectorForChangeUnit |
|
IProviderSyncServices::CreateReplicaKeyMap 或 ISyncKnowledge::GetReplicaKeyMap。 |
下列介面用來檢查或建立知識物件。每個介面都可以透過指定的機制取得。
介面 | 取得方式 |
---|---|
將 IID_IConstructReplicaKeyMap 傳遞至 IReplicaKeyMap 物件的 QueryInterface 方法。 |
|
將 IID_ICoreFragmentInspector 傳遞至 ISyncKnowledge2::GetInspector。 |
|
將 IID_IKnowledgeBuilder2 傳遞至 IKnowledgeBuilder 物件的 QueryInterface 方法。 |
工作階段介面
同步處理應用程式會使用下列介面開始同步處理工作階段並擷取該工作階段的相關資訊。每個介面都可以使用指定的機制取得。
介面 | 取得方式 |
---|---|
將 IID_ISyncSessionExtendedErrorInfo 傳遞至 ISyncSession 物件的 QueryInterface 方法。 |
|
呼叫 IProviderSyncServices2::CreateSyncSessionState。也透過 Sync Framework 傳遞至 IKnowledgeSyncProvider::BeginSession 和 IKnowledgeSyncProvider::EndSession。 |
|
將 IID_ISyncSessionState2 傳遞至 ISyncSessionState 物件的 QueryInterface 方法。 |
|
將 IID_ISyncDataConversionControl 傳遞至 ISyncSessionState 物件的 QueryInterface 方法。 |
應用程式回呼資料介面
Sync Framework 會使用指定的回呼方法,將下列介面傳遞至同步處理應用程式。
介面 | 回呼方法 |
---|---|
其他介面
下列介面用來註冊提供者轉換子。每個介面都可以透過呼叫指定的方法來取得。
介面 | 透過呼叫下列方法取得 |
---|---|
由同步處理提供者實作
下列介面是由同步處理提供者實作。
提供者介面
當下列每個介面收到指定的 IID 時,則必須透過 ISyncProvider 物件的 QueryInterface 方法傳回。同步處理應用程式會使用 IApplicationSyncServices::CreateSyncSession,將這些介面傳遞至同步處理工作階段物件。
介面 | IID |
---|---|
IID_IKnowledgeSyncProvider |
|
IID_ISyncProvider |
|
IID_IFilterTrackingProvider |
|
IID_IRequestFilteredSync |
|
IID_ISupportFilteredSync |
變更套用者目標介面
下列介面是由使用同步變更套用者的目的地提供者實作。當每個實作的介面收到指定的 IID 時,則必須透過 ISynchronousNotifyingChangeApplierTarget 物件的 QueryInterface 方法傳回。系統會使用 ISynchronousNotifyingChangeApplier::ApplyChanges 之類的方法,將這些介面傳遞至變更套用者元件。
介面 | IID |
---|---|
IID_ISynchronousNotifyingChangeApplierTarget |
|
IID_ISynchronousNotifyingChangeApplierTarget2 |
|
IID_IFilteredReplicaNotifyingChangeApplierTarget |
|
IID_IFilterTrackingNotifyingChangeApplierTarget |
下列介面是由使用同步變更套用者的目的地提供者實作。系統會使用 IAsynchronousNotifyingChangeApplier::ApplyChanges 之類的方法,將這個介面傳遞至變更套用者元件。
介面 | IID |
---|---|
IID_IAsynchronousNotifyingChangeApplierTarget |
資料擷取器介面
下列介面是由使用變更套用者的目的地提供者實作。系統會使用指定的方法之類的方法,將這些介面傳遞至變更套用者元件。
介面 | 方法 |
---|---|
其他提供者介面
提供者會實作下列介面來使用各種功能,例如篩選和資料轉換。系統會使用指定的機制,將介面傳遞至 Sync Framework。
介面 | 機制 |
---|---|
透過方法傳回,例如 IFilteredReplicaNotifyingChangeApplierTarget::GetNewMoveins。 |
|
傳遞至 IProviderConverterRegistration::RegisterProviderConverter。 |
|
當 IID_ISupportLastWriteTime 傳遞至資料擷取器物件的 QueryInterface 時傳回。這通常是 ISynchronousDataRetriever 物件。 |
|
傳遞至 ISyncDataConversionControl::SetSourceDataConverter 或 ISyncDataConversionControl::SetDestinationDataConverter。 |
|
傳遞至方法,例如 IProviderCustomFilteredSyncServices::CreateCustomFilterInfo 或 IFilterKeyMap::AddFilter。 |
|
傳遞至 IProviderCustomFilteredSyncServices::DeserializeFilterKeyMap 或 IProviderCustomFilteredSyncServices::DeserializeChangeBatchWithFilterKeyMap。 |
由同步處理應用程式實作
同步處理應用程式會實作下列介面來接收同步處理期間發生之事件的通知。Sync Framework 會透過將指定的 IID 傳遞至 ISyncCallback 介面 (已傳遞至 ISyncSession::RegisterCallback) 的 QueryInterface 方法取得這些介面。
介面 | IID |
---|---|
IID_ISyncCallback |
|
IID_ISyncCallback2 |
|
IID_ISyncConstraintCallback |
錯誤碼
Sync Framework 會使用一組自訂錯誤來報告各種問題。如需詳細資訊,請參閱 Sync Framework 錯誤碼。
請參閱
概念
Sync Framework Unmanaged API
Microsoft Sync Framework
自訂提供者的基本原則
管理標準提供者的中繼資料
實作標準的自訂提供者
實作同步處理應用程式