Базовые компоненты Sync Framework
Базовые компоненты платформы Sync Framework можно использовать из неуправляемого кода для выполнения синхронизации. Эти компоненты применяются для управления метаданными, а также для создания служб и приложений синхронизации.
Структуры, перечисления и флаги
В следующей таблице перечислены структуры, перечисления и наборы флагов, определяемые в платформе Sync Framework, а также функции, с которыми обычно сопоставляется каждый компонент.
Компонент | Связанная функция |
---|---|
Метаданные |
|
Метаданные |
|
Фильтрация |
|
Метаданные |
|
Метаданные |
|
Метаданные |
|
Сеанс |
|
Метаданные |
|
Служба применения изменений |
|
Конфликты ограничений |
|
Конфликты параллелизма |
|
Конфликты ограничений |
|
Фильтрация |
|
Фильтрация |
|
Метаданные |
|
Конфликты ограничений |
|
Синхронизация восстановления |
|
Обратный вызов приложения |
|
Обратный вызов приложения |
|
Конфликты параллелизма |
|
Применение изменений |
|
Управление версиями |
|
Метаданные |
|
Метаданные |
|
Фильтрация |
|
Метаданные |
Интерфейсы, реализуемые платформой Sync Framework
Следующие интерфейсы реализуются платформой Sync Framework.
Интерфейсы фабрики
Следующие интерфейсы используются главным образом для создания других компонентов платформы Sync Framework. Каждый из этих интерфейсов может быть создан путем передачи CLSID_SyncServices и указанного идентификатора методу 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 методу QueryInterface объекта ISyncChangeBuilder. |
|
Возвращенные различными методами, такими как ISyncChangeBatchBase::AddItemMetadataToGroup. |
Следующие интерфейсы используются для обработки базовых единиц. Указанный механизм позволяет получить любой из интерфейсов.
Интерфейс | Получено |
---|---|
Вызовом метода IEnumSyncChangeUnits::Next. |
|
Вызов метода, например ISyncChange::GetChangeUnits. |
Следующие интерфейсы используются для составления или перечисления списка изменений. Указанный механизм позволяет получить любой из интерфейсов.
Интерфейс | Получено |
---|---|
Вызовом метода IProviderSyncServices::CreateDestinationChangeVersionsBuilder. |
|
Передача IID_IDestinationChangeVersionsBuilder2 методу QueryInterface объекта IDestinationChangeVersionsBuilder. |
|
Вызовом метода ISyncChangeBatchBase::GetChangeEnumerator или IDestinationChangeVersionsBuilder::GetChangeEnumerator. |
|
Передачей значения IID_IFilterTrackingSyncChangeBuilder методу QueryInterface объекта IDestinationChangeVersionsBuilder. |
Интерфейсы объекта применения изменений
Следующие интерфейсы могут быть использованы поставщиком назначения для обработки конфликтов и применения изменений.
Все интерфейсы, перечисленные в следующей таблице, могут быть получены с помощью передачи соответствующего идентификатора в метод IProviderSyncServices::CreateChangeApplier или в метод QueryInterface любого другого интерфейса в таблице.
Интерфейс | IID |
---|---|
IID_IAsynchronousNotifyingChangeApplier |
|
IID_ISynchronousNotifyingChangeApplier |
|
IID_ISynchronousNotifyingChangeApplier2 |
Объект применения изменений регистрирует следующий интерфейс в поставщике назначения вызовом метода IAsynchronousNotifyingChangeApplierTarget::RegisterCallback.
Интерфейс | IID |
---|---|
IID_IAsynchronousNotifyingChangeApplierTargetCallback |
Следующие интерфейсы используются для связи объекта применения изменений и поставщика при обнаружении конфликта и применении изменений. Указанный механизм позволяет получить любой из интерфейсов.
Интерфейс | Получено |
---|---|
Передается таким методам, как ISynchronousDataRetriever::LoadChangeData. |
|
Передается IID_IFilterTrackingSaveChangeContext методу QueryInterface объекта ISaveChangeContext или ISaveChangeWithChangeUnitsContext. |
|
Вызывается IProviderSyncServices::CreateRecoverableErrorData, IRecoverableError::GetRecoverableErrorDataForChange или IRecoverableError::GetRecoverableErrorDataForChangeUnit. |
|
Передается методу ISynchronousNotifyingChangeApplierTarget::SaveChange и IAsynchronousNotifyingChangeApplierTarget::SaveChange. |
|
Передается IID_ISaveChangeContext2 методу QueryInterface объекта ISaveChangeContext. |
|
Передается методу ISynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits и IAsynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits. |
|
Передается IID_ISaveChangeWithChangeUnitsContext2 методу QueryInterface объекта ISaveChangeWithChangeUnitsContext. |
|
Передается методу IAsynchronousDataRetriever::RegisterCallback. |
Если необходим более высокий уровень гибкости, вместо стандартного объекта применения изменений можно использовать следующие интерфейсы. Указанный механизм используется для получения любого из интерфейсов.
Интерфейс | Получено |
---|---|
Вызовом метода IChangeApplicationServices::GetChangeApplicationContext. |
|
Передача IID_IChangeApplicationServices методу IProviderSyncServices::CreateChangeApplier. |
Ведение журнала конфликтов
Для ведения журнала конфликтов используются следующие интерфейсы. Указанный механизм позволяет получить любой из интерфейсов.
Интерфейс | Получено |
---|---|
Может быть реализован поставщиком или получен с помощью передачи IID_IConflictLogAccess методу QueryInterface объекта IMemoryConflictLog. |
|
Может быть реализован поставщиком или получен с помощью передачи IID_IConflictLogWriter методу QueryInterface объекта IMemoryConflictLog. |
|
Вызовом метода IEnumLoggedConflictsBuilder::GetChangeEnumerator. |
|
Вызовом метода IProviderSyncServices2::CreateLoggedConflictsEnumBuilder. |
|
Вызовом метода IProviderSyncServices2::CreateLoggedConflict. |
|
Вызовом метода IProviderSyncServices2::CreateMemoryConflictLog. |
Фильтрация
Следующие интерфейсы представляют сведения о фильтрах, которые используются для управления данными, включенными в область синхронизации. Указанный механизм позволяет получить любой из интерфейсов.
Интерфейс | Получено |
---|---|
Передача флага SYNC_FILTER_INFO_FLAG_CHANGE_UNIT_LIST методу IProviderFilteredSyncServices::CreateFilterInfo и последующая передача IID_IChangeUnitListFilterInfo методу QueryInterface возвращаемого объекта ISyncFilterInfo. |
|
Вызовом метода IProviderCustomFilteredSyncServices::CreateCombinedFilterInfo. |
|
Вызовом метода IProviderCustomFilteredSyncServices::CreateCustomFilterInfo. |
|
Вызовом метода IProviderCustomFilteredSyncServices::CreateFilterKeyMap или ISyncChangeBatchWithFilterKeyMap::GetFilterKeyMap. |
|
Передается методу IRequestFilteredSync::SpecifyFilter. |
|
Передается методу IFilterTrackingProvider::SpecifyTrackedFilters. |
|
Вызов методов, например IProviderFilteredSyncServices::CreateFilterInfo. |
|
Передача IID_ISyncFilterInfo2 методу QueryInterface объекта ISyncFilterInfo. |
Метаданные набора знаний
Следующие интерфейсы представляют объект набора знаний. Все интерфейсы, перечисленные в таблице, могут быть получены с помощью передачи указанного идентификатора в метод 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 методу QueryInterface объекта IReplicaKeyMap. |
|
Передача IID_ICoreFragmentInspector методу ISyncKnowledge2::GetInspector. |
|
Вызовом метода IClockVectorServices::CreateKnowledgeBuilder. |
|
Передача IID_IKnowledgeBuilder2 методу QueryInterface объекта IKnowledgeBuilder. |
Интерфейсы сеанса
Следующие интерфейсы используются приложением синхронизации для начала сеанса синхронизации и вызова сведений о сеансе. Указанный механизм позволяет получить любой из интерфейсов.
Интерфейс | Получено |
---|---|
Вызовом метода IApplicationSyncServices::CreateSyncSession. |
|
Передача IID_ISyncSessionExtendedErrorInfo методу QueryInterface объекта ISyncSession. |
|
Вызовом метода IProviderSyncServices2::CreateSyncSessionState. Также передача платформой Sync Framework методам IKnowledgeSyncProvider::BeginSession и IKnowledgeSyncProvider::EndSession. |
|
Передача IID_ISyncSessionState2 методу QueryInterface объекта ISyncSessionState. |
|
Передача IID_ISyncDataConversionControl методу QueryInterface объекта ISyncSessionState. |
Интерфейсы данных обратного вызова приложений
Следующие интерфейсы передаются платформой Sync Framework приложению синхронизации при использовании указанного метода обратного вызова.
Интерфейс | Метод обратного вызова |
---|---|
Другие интерфейсы
Следующий интерфейс используется для регистрации преобразователя поставщика. Он может быть получен при вызове указанного метода.
Интерфейс | Получено вызовом |
---|---|
Реализация с помощью службы синхронизации
Следующие интерфейсы реализуются с помощью служб синхронизации.
Интерфейсы службы синхронизации
Все следующие интерфейсы должны возвращаться с помощью метода QueryInterface объекта ISyncProvider при получении указанного идентификатора. Эти интерфейсы передаются приложением синхронизации объекту сеанса синхронизации с помощью метода IApplicationSyncServices::CreateSyncSession.
Интерфейс | IID |
---|---|
IID_IKnowledgeSyncProvider |
|
IID_ISyncProvider |
|
IID_IFilterTrackingProvider |
|
IID_IRequestFilteredSync |
|
IID_ISupportFilteredSync |
Целевые интерфейсы объекта применения изменений
Следующие интерфейсы реализуются в поставщике назначения, использующем синхронный объект применения изменений. Каждый реализуемый интерфейс должен возвращаться с помощью метода QueryInterface объекта ISynchronousNotifyingChangeApplierTarget при получении указанного идентификатора. Эти интерфейсы передаются объекту применения изменения через такие методы, как 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 получает эти интерфейсы с помощью передачи указанного идентификатора методу QueryInterface интерфейса ISyncCallback, передаваемого методу ISyncSession::RegisterCallback.
Интерфейс | IID |
---|---|
IID_ISyncCallback |
|
IID_ISyncCallback2 |
|
IID_ISyncConstraintCallback |
Коды ошибок
Sync Framework используют набор пользовательских ошибок для сообщения о проблемах. Дополнительные сведения см. в разделе Коды ошибок Sync Framework.
См. также
Основные положения
Неуправляемый API для платформы Sync Framework
Платформа Microsoft Sync Framework
Основные принципы построения пользовательских поставщиков
Управление метаданными для стандартных поставщиков
Реализация стандартного пользовательского поставщика
Реализация приложения синхронизации