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


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

Когда поставщик источника отвечает на вызов метода 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

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

Реализация стандартного пользовательского поставщика
Обработка конфликтов
Основные сведения о наборе знаний синхронизации