Поделиться через


Перечисление изменений

Когда поставщик источника отвечает на вызов метода GetChangeBatch (для управляемого кода) или метода IKnowledgeSyncProvider::GetChangeBatch (для неуправляемого кода), его задачей является создание пакета изменений, которые неизвестны в реплике-назначении. Поставщик источника определяет, какие элементы в реплике-источнике не содержатся в объекте набора знаний, отправленном поставщиком назначения, а затем возвращает пакет, составленный из этих элементов.

Каждый пакет изменений состоит из следующих данных.

  • Глобальные идентификаторы и версии измененных элементов.

  • Отметки полного удаления, о которых нужно известить реплику-назначение.

  • Определяющий набор знаний. Это набор знаний реплики-источника на момент внесения изменений. Платформа Sync Framework вычисляет набор известных знаний для назначения из определяющего набора знаний, когда поставщик назначения применяет изменения.

  • Необходимый набор знаний. Это минимальный набор знаний, который должна иметь реплика-назначение для обработки этого пакета изменений. Если необходимый набор знаний не входит в набор знаний реплики-назначения, эта реплика не может обрабатывать данные изменения.

  • Утраченный набор знаний реплики-источника. Этот набор используется, чтобы определить устаревшие данные в реплике-назначении.

Изменение перечисления между двумя репликами

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

NoteПримечание.

   Реплика должна обеспечить, чтобы изменения, выполняемые локально, отражались в наборе знаний до того, как служба выполнит перечисление изменений. Для этого можно обновить набор знаний во время выполнения локального изменения или выполнить этап обслуживания метаданных перед перечислением изменений.

В этом сценарии поставщик назначения запрашивает изменения от поставщика источника. Запрос выполняется в следующем порядке.

  1. Реплика-назначение обеспечивает, что все изменения, выполненные локально, отражается в наборе знаний для области, которая должна синхронизироваться с репликой-источником.

  2. Поставщик назначения отправляет набор знаний реплики-назначения в поставщик источника. Поставщик источника получает набор знаний с помощью метода GetChangeBatch (для управляемого кода) или метода IKnowledgeSyncProvider::GetChangeBatch (для неуправляемого кода).

  3. Чтобы построить пакет изменений, поставщик источника перечисляет изменения и удаления в реплике-источнике и проверяет каждую операцию по набору знаний реплики-назначения. Изменение добавляется в пакет изменений только в случае, когда оно отсутствует в наборе знаний реплики-назначения. Пакет изменений представляется объектом ChangeBatch (для управляемого кода) или интерфейсом ISyncChangeBatch (для неуправляемого кода).

  4. Поставщик источника возвращает пакет изменений поставщику назначения.

NoteПримечание.

   В наборе изменений может содержаться большое число изменений. Чтобы получить достаточное время на обработку списка входящих изменений, поставщик назначения может запросить отправку изменений пакетами, вернув ненулевое значение размера пакета в методе GetSyncBatchParameters (для управляемого кода) или методе GetSyncBatchParameters (для неуправляемого кода).

Когда поставщик источника использует базовые единицы для представления подэлементов, которые перечисляются из реплики-источника, он отправляет только изменившиеся базовые единицы, а не элемент целиком. Дополнительные сведения см. в разделе Синхронизация базовых единиц.

Обработка устаревших изменений

Во время формирования пакета изменений автоматически исключаются устаревшие изменения. Устаревшим считается изменение, которое уже содержится в наборе знаний реплики-назначения и которое не должно применяться в реплике-назначении. Когда изменение добавляется в пакет изменений, платформа Sync Framework сравнивает версию изменения с набором знаний реплики-назначения и добавляет изменение, только если оно не содержится в наборе знаний реплики-назначения. В результате создается пакет изменений минимального размера, что позволяет реализовать в службе более простой алгоритм перечисления изменений, например основанный на счетчике тактов.

Служба может выполнять собственную проверку изменений, добавляемых в пакет, чтобы убедиться, что они не являются устаревшими. В ходе этой проверки служба определяет, содержатся ли в наборе знаний реплики-назначения глобальный идентификатор и версия изменения. Это выполняется с помощью метода Contains (для управляемого кода) или метода ISyncKnowledge::ContainsChange (для неуправляемого кода). Если набор знаний не содержит изменение, служба добавляет это изменение в пакет. Это позволяет создать пакет изменений минимального размера и полезно для служб, которым необходимо полностью контролировать создание пакета изменений.

См. также

Справочник

Интерфейс ISyncKnowledge
Интерфейс ISyncChangeBatch
Интерфейс IKnowledgeSyncProvider
IKnowledgeSyncProvider::GetChangeBatch
SyncKnowledge
ChangeBatch
KnowledgeSyncProvider
GetChangeBatch

Основные понятия

Службы синхронизации
Обработка конфликтов
Основные сведения о наборе знаний синхронизации