Перечисление изменений
Когда поставщик источника отвечает на вызов метода GetChangeBatch (для управляемого кода) или метода IKnowledgeSyncProvider::GetChangeBatch (для неуправляемого кода), его задачей является создание пакета изменений, которые неизвестны в реплике-назначении. Поставщик источника определяет, какие элементы в реплике-источнике не содержатся в объекте набора знаний, отправленном поставщиком назначения, а затем возвращает пакет, составленный из этих элементов.
Каждый пакет изменений состоит из следующих данных.
Глобальные идентификаторы и версии измененных элементов.
Отметки полного удаления, о которых нужно известить реплику-назначение.
Определяющий набор знаний. Это набор знаний реплики-источника на момент внесения изменений. Платформа Sync Framework вычисляет набор известных знаний для назначения из определяющего набора знаний, когда поставщик назначения применяет изменения.
Необходимый набор знаний. Это минимальный набор знаний, который должна иметь реплика-назначение для обработки этого пакета изменений. Если необходимый набор знаний не входит в набор знаний реплики-назначения, эта реплика не может обрабатывать данные изменения.
Утраченный набор знаний реплики-источника. Этот набор используется, чтобы определить устаревшие данные в реплике-назначении.
Изменение перечисления между двумя репликами
В этом подразделе приведен сценарий, в котором описывается процесс изменения перечисления между двумя репликами с помощью интерфейсов набора знаний платформы Sync Framework.
Примечание. |
---|
Реплика должна обеспечить, чтобы изменения, выполняемые локально, отражались в наборе знаний до того, как служба выполнит перечисление изменений. Для этого можно обновить набор знаний во время выполнения локального изменения или выполнить этап обслуживания метаданных перед перечислением изменений. |
В этом сценарии поставщик назначения запрашивает изменения от поставщика источника. Запрос выполняется в следующем порядке.
Реплика-назначение обеспечивает, что все изменения, выполненные локально, отражается в наборе знаний для области, которая должна синхронизироваться с репликой-источником.
Поставщик назначения отправляет набор знаний реплики-назначения в поставщик источника. Поставщик источника получает набор знаний с помощью метода GetChangeBatch (для управляемого кода) или метода IKnowledgeSyncProvider::GetChangeBatch (для неуправляемого кода).
Чтобы построить пакет изменений, поставщик источника перечисляет изменения и удаления в реплике-источнике и проверяет каждую операцию по набору знаний реплики-назначения. Изменение добавляется в пакет изменений только в случае, когда оно отсутствует в наборе знаний реплики-назначения. Пакет изменений представляется объектом ChangeBatch (для управляемого кода) или интерфейсом ISyncChangeBatch (для неуправляемого кода).
Поставщик источника возвращает пакет изменений поставщику назначения.
Примечание. |
---|
В наборе изменений может содержаться большое число изменений. Чтобы получить достаточное время на обработку списка входящих изменений, поставщик назначения может запросить отправку изменений пакетами, вернув ненулевое значение размера пакета в методе GetSyncBatchParameters (для управляемого кода) или методе GetSyncBatchParameters (для неуправляемого кода). |
Когда поставщик источника использует базовые единицы для представления подэлементов, которые перечисляются из реплики-источника, он отправляет только изменившиеся базовые единицы, а не элемент целиком. Дополнительные сведения см. в разделе Синхронизация базовых единиц.
Обработка устаревших изменений
Во время формирования пакета изменений автоматически исключаются устаревшие изменения. Устаревшим считается изменение, которое уже содержится в наборе знаний реплики-назначения и которое не должно применяться в реплике-назначении. Когда изменение добавляется в пакет изменений, платформа Sync Framework сравнивает версию изменения с набором знаний реплики-назначения и добавляет изменение, только если оно не содержится в наборе знаний реплики-назначения. В результате создается пакет изменений минимального размера, что позволяет реализовать в службе более простой алгоритм перечисления изменений, например основанный на счетчике тактов.
Служба может выполнять собственную проверку изменений, добавляемых в пакет, чтобы убедиться, что они не являются устаревшими. В ходе этой проверки служба определяет, содержатся ли в наборе знаний реплики-назначения глобальный идентификатор и версия изменения. Это выполняется с помощью метода Contains (для управляемого кода) или метода ISyncKnowledge::ContainsChange (для неуправляемого кода). Если набор знаний не содержит изменение, служба добавляет это изменение в пакет. Это позволяет создать пакет изменений минимального размера и полезно для служб, которым необходимо полностью контролировать создание пакета изменений.
См. также
Справочник
Интерфейс ISyncKnowledge
Интерфейс ISyncChangeBatch
Интерфейс IKnowledgeSyncProvider
IKnowledgeSyncProvider::GetChangeBatch
SyncKnowledge
ChangeBatch
KnowledgeSyncProvider
GetChangeBatch
Основные понятия
Службы синхронизации
Обработка конфликтов
Основные сведения о наборе знаний синхронизации