Базовые компоненты Sync Framework

Базовые компоненты платформы Sync Framework можно использовать из неуправляемого кода для выполнения синхронизации. Эти компоненты применяются для управления метаданными, а также для создания служб и приложений синхронизации.

Структуры, перечисления и флаги

В следующей таблице перечислены структуры, перечисления и наборы флагов, определяемые в платформе Sync Framework, а также функции, с которыми обычно сопоставляется каждый компонент.

Компонент Связанная функция

Структура ID_PARAMETER_PAIR

Метаданные

Структура ID_PARAMETERS

Метаданные

Структура SYNC_FILTER_CHANGE

Фильтрация

Структура SYNC_GID

Метаданные

Структура SYNC_ID

Метаданные

Структура SYNC_RANGE

Метаданные

Структура SYNC_SESSION_STATISTICS

Сеанс

Структура SYNC_VERSION

Метаданные

Перечисление CHANGE_APPLICATION_ACTION

Служба применения изменений

Перечисление COLLISION_CONFLICT_RESOLUTION_POLICY

Конфликты ограничений

Перечисление CONFLICT_RESOLUTION_POLICY

Конфликты параллелизма

Перечисление CONSTRAINT_CONFLICT_REASON

Конфликты ограничений

Перечисление FILTER_COMBINATION_TYPE

Фильтрация

Перечисление FILTERING_TYPE

Фильтрация

Перечисление KNOWLEDGE_COOKIE_COMPARISON_RESULT

Метаданные

Перечисление SYNC_CONSTRAINT_RESOLVE_ACTION

Конфликты ограничений

Перечисление SYNC_FULL_ENUMERATION_ACTION

Синхронизация восстановления

Перечисление SYNC_PROGRESS_STAGE

Обратный вызов приложения

Перечисление SYNC_PROVIDER_ROLE

Обратный вызов приложения

Перечисление SYNC_RESOLVE_ACTION

Конфликты параллелизма

Перечисление SYNC_SAVE_ACTION

Применение изменений

Перечисление SYNC_SERIALIZATION_VERSION

Управление версиями

Перечисление SYNC_STATISTICS

Метаданные

Флаги SYNC_CHANGE_FLAG

Метаданные

Флаги SYNC_FILTER_INFO_FLAG

Фильтрация

Флаги SYNC_SERIALIZE

Метаданные

Интерфейсы, реализуемые платформой Sync Framework

Следующие интерфейсы реализуются платформой Sync Framework.

Интерфейсы фабрики

Следующие интерфейсы используются главным образом для создания других компонентов платформы Sync Framework. Каждый из этих интерфейсов может быть создан путем передачи CLSID_SyncServices и указанного идентификатора методу CoCreateInstance.

Интерфейс IID

Интерфейс IApplicationSyncServices

IID_IApplicationSyncServices

Интерфейс IClockVectorServices

IID_IClockVectorServices

Интерфейс IProviderCustomFilteredSyncServices

IID_IProviderCustomFilteredSyncServices

Интерфейс IProviderFilteredSyncServices

IID_IProviderFilteredSyncServices

Интерфейс IProviderFilteredSyncServices2

IID_IProviderFilteredSyncServices2

Интерфейс IProviderSyncServices

IID_IProviderSyncServices

Интерфейс IProviderSyncServices2

IID_IProviderSyncServices2

Интерфейсы пакета изменений

Следующие интерфейсы представляют пакет изменений. Каждый из интерфейсов можно получить, передав указанный IID методу QueryInterface любого другого интерфейса. Некоторые интерфейсы могут быть реализованы только при выполнении определенных условий.

Интерфейс IID Условие

Интерфейс ISyncChangeBatch

IID_ISyncChangeBatch

Пакет изменений не может выполняться в рамках синхронизации восстановления.

Интерфейс ISyncChangeBatch2

IID_ISyncChangeBatch2

Всегда.

Интерфейс ISyncChangeBatchAdvanced

IID_ISyncChangeBatchAdvanced

Всегда.

Интерфейс ISyncChangeBatchBase

IID_ISyncChangeBatchBase

Всегда.

Интерфейс ISyncChangeBatchBase2

IID_ISyncChangeBatchBase2

Всегда.

Интерфейс ISyncChangeBatchWithFilterKeyMap

IID_ISyncChangeBatchWithFilterKeyMap

Всегда.

Интерфейс ISyncChangeBatchWithPrerequisite

IID_ISyncChangeBatchWithPrerequisite

Всегда.

Интерфейс ISyncFullEnumerationChangeBatch

IID_ISyncFullEnumerationChangeBatch

Пакет изменений должен выполняться в рамках синхронизации восстановления.

Интерфейс ISyncFullEnumerationChangeBatch2

IID_ISyncFullEnumerationChangeBatch2

Пакет изменений должен выполняться в рамках синхронизации восстановления.

Следующие интерфейсы представляют одиночное изменение. Каждый из интерфейсов можно получить, передав указанный IID методу QueryInterface любого другого интерфейса.

Интерфейс IID

Интерфейс ISyncChange

IID_ISyncChange

Интерфейс ISyncChangeWithFilterKeyMap

IID_ISyncChangeWithFilterKeyMap

Интерфейс ISyncChangeWithPrerequisite

IID_ISyncChangeWithPrerequisite

Интерфейс ISyncFullEnumerationChange

IID_ISyncFullEnumerationChange

Интерфейс ISyncMergeTombstoneChange

IID_ISyncMergeTombstoneChange

Следующие интерфейсы используются для добавления дополнительных сведений к объекту ISyncChange. Указанный механизм позволяет получить любой из интерфейсов.

Интерфейс Получено

Интерфейс IFilterTrackingSyncChangeBuilder

Передачей значения IID_IFilterTrackingSyncChangeBuilder методу QueryInterface объекта ISyncChangeBuilder.

Интерфейс ISyncChangeBuilder

Возвращенные различными методами, такими как ISyncChangeBatchBase::AddItemMetadataToGroup.

Следующие интерфейсы используются для обработки базовых единиц. Указанный механизм позволяет получить любой из интерфейсов.

Интерфейс Получено

Интерфейс ISyncChangeUnit

Вызовом метода IEnumSyncChangeUnits::Next.

IEnumSyncChangeUnits, интерфейс

Вызов метода, например ISyncChange::GetChangeUnits.

Следующие интерфейсы используются для составления или перечисления списка изменений. Указанный механизм позволяет получить любой из интерфейсов.

Интерфейс Получено

Интерфейс IDestinationChangeVersionsBuilder

Вызовом метода IProviderSyncServices::CreateDestinationChangeVersionsBuilder.

Интерфейс IDestinationChangeVersionsBuilder2

Передача IID_IDestinationChangeVersionsBuilder2 методу QueryInterface объекта IDestinationChangeVersionsBuilder.

Интерфейс IEnumSyncChanges

Вызовом метода ISyncChangeBatchBase::GetChangeEnumerator или IDestinationChangeVersionsBuilder::GetChangeEnumerator.

Интерфейс IFilterTrackingSyncChangeBuilder

Передачей значения IID_IFilterTrackingSyncChangeBuilder методу QueryInterface объекта IDestinationChangeVersionsBuilder.

Интерфейсы объекта применения изменений

Следующие интерфейсы могут быть использованы поставщиком назначения для обработки конфликтов и применения изменений.

Все интерфейсы, перечисленные в следующей таблице, могут быть получены с помощью передачи соответствующего идентификатора в метод IProviderSyncServices::CreateChangeApplier или в метод QueryInterface любого другого интерфейса в таблице.

Интерфейс IID

Интерфейс IAsynchronousNotifyingChangeApplier

IID_IAsynchronousNotifyingChangeApplier

Интерфейс ISynchronousNotifyingChangeApplier

IID_ISynchronousNotifyingChangeApplier

Интерфейс ISynchronousNotifyingChangeApplier2

IID_ISynchronousNotifyingChangeApplier2

Объект применения изменений регистрирует следующий интерфейс в поставщике назначения вызовом метода IAsynchronousNotifyingChangeApplierTarget::RegisterCallback.

Интерфейс IID

Интерфейс IAsynchronousNotifyingChangeApplierTargetCallback

IID_IAsynchronousNotifyingChangeApplierTargetCallback

Следующие интерфейсы используются для связи объекта применения изменений и поставщика при обнаружении конфликта и применении изменений. Указанный механизм позволяет получить любой из интерфейсов.

Интерфейс Получено

Интерфейс ILoadChangeContext

Передается таким методам, как ISynchronousDataRetriever::LoadChangeData.

Интерфейс IFilterTrackingSaveChangeContext

Передается IID_IFilterTrackingSaveChangeContext методу QueryInterface объекта ISaveChangeContext или ISaveChangeWithChangeUnitsContext.

Интерфейс IRecoverableErrorData

Вызывается IProviderSyncServices::CreateRecoverableErrorData, IRecoverableError::GetRecoverableErrorDataForChange или IRecoverableError::GetRecoverableErrorDataForChangeUnit.

Интерфейс ISaveChangeContext

Передается методу ISynchronousNotifyingChangeApplierTarget::SaveChange и IAsynchronousNotifyingChangeApplierTarget::SaveChange.

Интерфейс ISaveChangeContext2

Передается IID_ISaveChangeContext2 методу QueryInterface объекта ISaveChangeContext.

Интерфейс ISaveChangeWithChangeUnitsContext

Передается методу ISynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits и IAsynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits.

Интерфейс ISaveChangeWithChangeUnitsContext2

Передается IID_ISaveChangeWithChangeUnitsContext2 методу QueryInterface объекта ISaveChangeWithChangeUnitsContext.

Интерфейс IDataRetrieverCallback

Передается методу IAsynchronousDataRetriever::RegisterCallback.

Если необходим более высокий уровень гибкости, вместо стандартного объекта применения изменений можно использовать следующие интерфейсы. Указанный механизм используется для получения любого из интерфейсов.

Интерфейс Получено

Интерфейс IChangeApplicationContext

Вызовом метода IChangeApplicationServices::GetChangeApplicationContext.

Интерфейс IChangeApplicationServices

Передача IID_IChangeApplicationServices методу IProviderSyncServices::CreateChangeApplier.

Ведение журнала конфликтов

Для ведения журнала конфликтов используются следующие интерфейсы. Указанный механизм позволяет получить любой из интерфейсов.

Интерфейс Получено

Интерфейс IConflictLogAccess

Может быть реализован поставщиком или получен с помощью передачи IID_IConflictLogAccess методу QueryInterface объекта IMemoryConflictLog.

Интерфейс IConflictLogWriter

Может быть реализован поставщиком или получен с помощью передачи IID_IConflictLogWriter методу QueryInterface объекта IMemoryConflictLog.

Интерфейс IEnumLoggedConflicts

Вызовом метода IEnumLoggedConflictsBuilder::GetChangeEnumerator.

Интерфейс IEnumLoggedConflictsBuilder

Вызовом метода IProviderSyncServices2::CreateLoggedConflictsEnumBuilder.

Интерфейс ILoggedConflict

Вызовом метода IProviderSyncServices2::CreateLoggedConflict.

Интерфейс IMemoryConflictLog

Вызовом метода IProviderSyncServices2::CreateMemoryConflictLog.

Фильтрация

Следующие интерфейсы представляют сведения о фильтрах, которые используются для управления данными, включенными в область синхронизации. Указанный механизм позволяет получить любой из интерфейсов.

Интерфейс Получено

Интерфейс IChangeUnitListFilterInfo

Передача флага SYNC_FILTER_INFO_FLAG_CHANGE_UNIT_LIST методу IProviderFilteredSyncServices::CreateFilterInfo и последующая передача IID_IChangeUnitListFilterInfo методу QueryInterface возвращаемого объекта ISyncFilterInfo.

Интерфейс ICombinedFilterInfo

Вызовом метода IProviderCustomFilteredSyncServices::CreateCombinedFilterInfo.

Интерфейс ICustomFilterInfo

Вызовом метода IProviderCustomFilteredSyncServices::CreateCustomFilterInfo.

Интерфейс IFilterKeyMap

Вызовом метода IProviderCustomFilteredSyncServices::CreateFilterKeyMap или ISyncChangeBatchWithFilterKeyMap::GetFilterKeyMap.

Интерфейс IFilterRequestCallback

Передается методу IRequestFilteredSync::SpecifyFilter.

Интерфейс IFilterTrackingRequestCallback

Передается методу IFilterTrackingProvider::SpecifyTrackedFilters.

Интерфейс ISyncFilterInfo

Вызов методов, например IProviderFilteredSyncServices::CreateFilterInfo.

Интерфейс ISyncFilterInfo2

Передача IID_ISyncFilterInfo2 методу QueryInterface объекта ISyncFilterInfo.

Метаданные набора знаний

Следующие интерфейсы представляют объект набора знаний. Все интерфейсы, перечисленные в таблице, могут быть получены с помощью передачи указанного идентификатора в метод QueryInterface любого другого интерфейса в таблице. Определенные методы некоторых интерфейсов могут завершиться ошибкой, если минимальная версия, поддерживаемая для объекта набора знаний, не совпадает с ожидаемым значением, таким как ISyncKnowledge::GetSingleItemExceptions, что может произойти, если минимальная поддерживаемая версия не является SYNC_SERIALIZATION_VERSION_V1. Также следует помнить, что использование некоторых методов приводит к изменению минимальной поддерживаемой версии, например метод IKnowledgeWithMarkers::AddAllChangeUnitsRequiredMarker задает для минимальной поддерживаемой версии значение SYNC_SERIALIZATION_VERSION_V3. Дополнительные сведения о настроенных или обязательных минимальных поддерживаемых версиях см. в справочной документации по каждому методу.

Интерфейс IID

Интерфейс ISyncKnowledge

IID_ISyncKnowledge

Интерфейс ISyncKnowledge2

IID_ISyncKnowledge2

Интерфейс IKnowledgeWithMarkers

IID_IKnowledgeWithMarkers

Интерфейс IForgottenKnowledge

IID_IForgottenKnowledge

Следующие интерфейсы представляют компоненты объекта набора знаний, имеющего минимальную поддерживаемую версию SYNC_SERIALIZATION_VERSION_V1. Минимальную версию, поддерживаемую для объекта набора знаний, можно получить с помощью вызова метода ISyncKnowledge2::GetMinimumSupportedVersion. Указанный метод позволяет получить любой из интерфейсов.

Интерфейс Получено вызовом

Интерфейс IChangeUnitException

IEnumChangeUnitExceptions::Next

Интерфейс IRangeException

IEnumRangeExceptions::Next

Интерфейс ISingleItemException

IEnumSingleItemExceptions::Next

Интерфейс IEnumChangeUnitExceptions

ISyncKnowledge::GetChangeUnitExceptions

Интерфейс IEnumRangeExceptions

ISyncKnowledge::GetRangeExceptions

Интерфейс IEnumSingleItemExceptions

ISyncKnowledge::GetSingleItemExceptions

Следующие интерфейсы представляют компоненты всех версий объекта набора знаний. Указанный метод позволяет получить любой из интерфейсов.

Интерфейс Получено вызовом

Интерфейс IClockVector

ISyncKnowledge::FindClockVectorForItem или ISyncKnowledge::FindClockVectorForChangeUnit

Интерфейс IClockVectorElement

IEnumClockVector::Next

Интерфейс IEnumClockVector

IClockVector::GetClockVectorElements

Интерфейс ICoreFragment

ICoreFragmentInspector::NextCoreFragments

Интерфейс IReplicaKeyMap

IProviderSyncServices::CreateReplicaKeyMap или ISyncKnowledge::GetReplicaKeyMap.

Для проверки или создания объекта набора знаний можно использовать следующие интерфейсы. Указанный механизм позволяет получить любой из интерфейсов.

Интерфейс Получено

Интерфейс IConstructReplicaKeyMap

Передача IID_IConstructReplicaKeyMap методу QueryInterface объекта IReplicaKeyMap.

Интерфейс ICoreFragmentInspector

Передача IID_ICoreFragmentInspector методу ISyncKnowledge2::GetInspector.

Интерфейс IKnowledgeBuilder

Вызовом метода IClockVectorServices::CreateKnowledgeBuilder.

Интерфейс IKnowledgeBuilder2

Передача IID_IKnowledgeBuilder2 методу QueryInterface объекта IKnowledgeBuilder.

Интерфейсы сеанса

Следующие интерфейсы используются приложением синхронизации для начала сеанса синхронизации и вызова сведений о сеансе. Указанный механизм позволяет получить любой из интерфейсов.

Интерфейс Получено

Интерфейс ISyncSession

Вызовом метода IApplicationSyncServices::CreateSyncSession.

Интерфейс ISyncSessionExtendedErrorInfo

Передача IID_ISyncSessionExtendedErrorInfo методу QueryInterface объекта ISyncSession.

Интерфейс ISyncSessionState

Вызовом метода IProviderSyncServices2::CreateSyncSessionState. Также передача платформой Sync Framework методам IKnowledgeSyncProvider::BeginSession и IKnowledgeSyncProvider::EndSession.

Интерфейс ISyncSessionState2

Передача IID_ISyncSessionState2 методу QueryInterface объекта ISyncSessionState.

Интерфейс ISyncDataConversionControl

Передача IID_ISyncDataConversionControl методу QueryInterface объекта ISyncSessionState.

Интерфейсы данных обратного вызова приложений

Следующие интерфейсы передаются платформой Sync Framework приложению синхронизации при использовании указанного метода обратного вызова.

Интерфейс Метод обратного вызова

Интерфейс IChangeConflict

ISyncCallback::OnConflict

Интерфейс IConstraintConflict

ISyncConstraintCallback::OnConstraintConflict

Интерфейс IRecoverableError

ISyncCallback::OnRecoverableError

Другие интерфейсы

Следующий интерфейс используется для регистрации преобразователя поставщика. Он может быть получен при вызове указанного метода.

Интерфейс Получено вызовом

Интерфейс IProviderConverterRegistration

IProviderSyncServices2::CreateProviderConverterRegistration

Реализация с помощью службы синхронизации

Следующие интерфейсы реализуются с помощью служб синхронизации.

Интерфейсы службы синхронизации

Все следующие интерфейсы должны возвращаться с помощью метода QueryInterface объекта ISyncProvider при получении указанного идентификатора. Эти интерфейсы передаются приложением синхронизации объекту сеанса синхронизации с помощью метода IApplicationSyncServices::CreateSyncSession.

Интерфейс IID

Интерфейс IKnowledgeSyncProvider

IID_IKnowledgeSyncProvider

Интерфейс ISyncProvider

IID_ISyncProvider

Интерфейс IFilterTrackingProvider

IID_IFilterTrackingProvider

Интерфейс IRequestFilteredSync

IID_IRequestFilteredSync

Интерфейс ISupportFilteredSync

IID_ISupportFilteredSync

Целевые интерфейсы объекта применения изменений

Следующие интерфейсы реализуются в поставщике назначения, использующем синхронный объект применения изменений. Каждый реализуемый интерфейс должен возвращаться с помощью метода QueryInterface объекта ISynchronousNotifyingChangeApplierTarget при получении указанного идентификатора. Эти интерфейсы передаются объекту применения изменения через такие методы, как ISynchronousNotifyingChangeApplier::ApplyChanges.

Интерфейс IID

Интерфейс ISynchronousNotifyingChangeApplierTarget

IID_ISynchronousNotifyingChangeApplierTarget

Интерфейс ISynchronousNotifyingChangeApplierTarget2

IID_ISynchronousNotifyingChangeApplierTarget2

Интерфейс IFilteredReplicaNotifyingChangeApplierTarget

IID_IFilteredReplicaNotifyingChangeApplierTarget

Интерфейс IFilterTrackingNotifyingChangeApplierTarget

IID_IFilterTrackingNotifyingChangeApplierTarget

Следующий интерфейс реализуется поставщиком назначения, использующим асинхронный объект применения изменений. Этот интерфейс передается объекту применения изменения через метод наподобие IAsynchronousNotifyingChangeApplier::ApplyChanges.

Интерфейс IID

Интерфейс IAsynchronousNotifyingChangeApplierTarget

IID_IAsynchronousNotifyingChangeApplierTarget

Интерфейсы получателя данных

Следующие интерфейсы реализуются в поставщике назначения, использующем объект применения изменений. Эти интерфейсы передаются объекту применения изменений с помощью следующих методов.

Интерфейс Метод

Интерфейс IAsynchronousDataRetriever

IAsynchronousNotifyingChangeApplier::ApplyChanges.

Интерфейс ISynchronousDataRetriever

ISynchronousNotifyingChangeApplier::ApplyChanges.

Другие интерфейсы поставщика

Следующие интерфейсы реализуются поставщиком для использования различных функций, таких как фильтрация и преобразование данных. Интерфейс передается платформе Sync Framework с помощью указанного механизма.

Интерфейс Механизм

Интерфейс IEnumItemIds

Возвращенные методом, таким как IFilteredReplicaNotifyingChangeApplierTarget::GetNewMoveins.

Интерфейс IProviderConverter

Передается методу IProviderConverterRegistration::RegisterProviderConverter.

Интерфейс ISupportLastWriteTime

Возвращается при передаче IID_ISupportLastWriteTime объекту получателя данных QueryInterface. Обычно этим объектом является ISynchronousDataRetriever.

Интерфейс ISyncDataConverter

Передается методу ISyncDataConversionControl::SetSourceDataConverter или ISyncDataConversionControl::SetDestinationDataConverter.

Интерфейс ISyncFilter

Передается таким методам, как IProviderCustomFilteredSyncServices::CreateCustomFilterInfo или IFilterKeyMap::AddFilter.

Интерфейс ISyncFilterDeserializer

Передается методу IProviderCustomFilteredSyncServices::DeserializeFilterKeyMap или IProviderCustomFilteredSyncServices::DeserializeChangeBatchWithFilterKeyMap.

Реализуется приложениями синхронизации

Следующие интерфейсы реализуются приложением синхронизации для получения уведомлений о событиях, происходящих во время синхронизации. Платформа Sync Framework получает эти интерфейсы с помощью передачи указанного идентификатора методу QueryInterface интерфейса ISyncCallback, передаваемого методу ISyncSession::RegisterCallback.

Интерфейс IID

Интерфейс ISyncCallback

IID_ISyncCallback

Интерфейс ISyncCallback2

IID_ISyncCallback2

Интерфейс ISyncConstraintCallback

IID_ISyncConstraintCallback

Коды ошибок

Sync Framework используют набор пользовательских ошибок для сообщения о проблемах. Дополнительные сведения см. в разделе Коды ошибок Sync Framework.

См. также

Основные положения

Неуправляемый API для платформы Sync Framework
Платформа Microsoft Sync Framework
Основные принципы построения пользовательских поставщиков
Управление метаданными для стандартных поставщиков
Реализация стандартного пользовательского поставщика
Реализация приложения синхронизации