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


Архитектура и классы для синхронизации клиента и сервера

Службы Sync Framework обеспечивают синхронизацию между клиентской базой данных SQL Server Compact и базой данных сервера или любым другим источником данных, таким как служба, предоставляющая котировки акций в формате XML. Для синхронизации двух баз данных службы Sync Framework поддерживают двухуровневые и многоуровневые архитектуры с использованием любой базы данных сервера, для которой имеется поставщик ADO.NET. Для синхронизации между клиентской базой данных и другими типами источников данных службы Sync Framework поддерживают основанную на службах архитектуру. Она потребует больше прикладного кода, чем для двухуровневой или многоуровневой архитектуры, однако разработчику не придется менять подход к синхронизации.

На следующих иллюстрациях показаны компоненты, задействованные в двухуровневой и многоуровневой архитектурах, а также в основанных на службах архитектурах. Каждая из них иллюстрирует отдельный клиент, но часто несколько клиентов синхронизируются с одиночным сервером. В платформах Sync Framework для синхронизации баз данных по методу «клиент-сервер» используется модель «звезда». Синхронизация всегда начинается по инициативе клиента. Все изменения от каждого из клиентов синхронизируются сначала с сервером и только потом передаются другим клиентам (клиенты не производят обмен изменениями друг с другом напрямую).

Платформы Sync Framework поддерживают следующие виды синхронизации для сценариев «клиент-сервер»: моментальных снимков, только с загрузкой, только с передачей и двунаправленную синхронизацию.

  • Синхронизация моментальных снимков и синхронизация только с загрузкой обычно используются для сохранения и обновления на клиенте справочных данных, например каталога продуктов. Изменения данных, произведенные на сервере, в процессе синхронизации загружаются в клиентскую базу данных. При синхронизации моментальных снимков данные каждый раз обновляются полностью. Этот способ подходит для тех случаев, когда отслеживание добавочных изменений нежелательно или сервер не может его выполнять. При синхронизации только с загрузкой на клиент загружаются только добавочные изменения, то есть те, которые произошли с момента предыдущего сеанса синхронизации.

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

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

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

Компоненты архитектуры на иллюстрациях

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

Двухуровневая архитектура

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

Двухуровневая топология синхронизации

Кроме двух баз данных, все остальные элементы на иллюстрации представляют собой классы Sync Framework. Они содержатся в следующих DLL-библиотеках.

  • Библиотека Microsoft.Synchronization.Data.dll содержит агент синхронизации, таблицы и группы синхронизации.

  • Библиотека Microsoft. Synchronization.Data.SqlServerCe.dll содержит поставщик синхронизации клиента.

  • Библиотека Microsoft. Synchronization.Data.Server.dll содержит службу синхронизации сервера и адаптеры синхронизации.

Все библиотеки зависят от System.dll и System.Data.dll платформы .NET Framework 2.0 и более поздних версий. Microsoft.Synchronization.Data.SqlServerCe.dll также зависит от System.Data.SqlServerCe.dll из SQL Server Compact. Все DLL-библиотеки служб Sync Framework для двухуровневых приложений размещаются на клиенте. Microsoft.Synchronization.Data.dll и Microsoft.Synchronization.Data.Server.dll для многоуровневых приложений размещаются на отдельном компьютере, который обеспечивает работу службы синхронизации.

Многоуровневая архитектура

На второй иллюстрации изображена многоуровневая архитектура. Ей необходим посредник, служба и транспортный механизм для связи между клиентской базой данных и базой данных сервера. Эта архитектура распространена шире, чем двухуровневая, так как для нее не требуется прямого соединения между базами данных клиента и сервера.

Многоуровневая топология синхронизации

Основанная на службах архитектура

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

Топология синхронизации на основе служб

Клиентская база данных

Клиентская база данных для приложений Sync Framework является базой SQL Server Compact 3.5 с пакетом обновления 1 (SP1) с пакетом обновления 1 (SP1) и более поздних версий (включая 64-разрядную версию) SQL Server Compact. Платформа Sync Framework обеспечивает инфраструктуру для отслеживания добавочных изменений в клиентской базе данных. Эта инфраструктура активируется в момент первой синхронизации любой таблицы при помощи любого метода, кроме синхронизации моментальных снимков. По умолчанию метаданные, которые необходимы для плаьSync Framework в клиентской базе данных, хранятся 10 дней. Дополнительные сведения о хранении метаданных см. в разделе RetentionInDays.

Серверная база данных

Базой данных сервера может быть любая база данных, для которой имеется поставщик ADO.NET. Если необходимо отслеживать добавочные изменения в базе данных сервера, то базу данных необходимо подготовить для этого. Дополнительные сведения см. в разделе Отслеживание изменений в базе данных сервера.

Классы платформы Sync Framework

На приведенной выше иллюстрации представлены следующие классы: SyncAgent, SqlCeClientSyncProvider, DbServerSyncProvider, SyncTable, SyncGroup и SyncAdapter. Пример использования этих классов в приложении см. в разделе Приступая к работе: синхронизация клиента и сервера.

Агент синхронизации

Агент синхронизации управляет синхронизацией следующим образом.

  • Циклически обрабатывает каждую синхронизируемую таблицу.

  • Вызывает службу синхронизации клиента, чтобы получить и применить изменения к клиентской базе данных.

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

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

Служба синхронизации клиента

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

  • Сохраняет сведения о подготовленных к синхронизации таблицах на клиенте.

  • Получает изменения, которые произошли в клиентской базе данных со времени последней синхронизации.

  • Применяет добавочные изменения к клиентской базе данных.

  • Выявляет конфликтующие изменения.

Дополнительные сведения см. в разделах SqlCeClientSyncProvider и Как задать синхронизацию моментальными снимками, с загрузкой, с передачей и двунаправленную.

Служба синхронизации сервера

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

  • Сохраняет сведения о подготовленных к синхронизации таблицах на сервере.

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

  • Применяет добавочные изменения к базе данных сервера.

  • Выявляет конфликтующие изменения.

Дополнительные сведения см. в разделах DbServerSyncProvider и Как задать синхронизацию моментальными снимками, с загрузкой, с передачей и двунаправленную.

Таблица синхронизации и группа синхронизации

Таблица синхронизации определяется для каждой синхронизируемой таблицы. В ней сохраняются различные параметры, например направление синхронизации. Каждый клиент может запрашивать только те таблицы, которые ему необходимы. Это могут быть не все таблицы, доступ к которым предоставлен службой синхронизации сервера. Например, имеется 20 таблиц, 10 из которых настроены в службе синхронизации сервера для двунаправленной синхронизации. Клиент может запросить всего 12 таблиц в режиме только для загрузки. Хотя сервер поддерживает передачу данных, клиент не обязан изменять или синхронизировать все таблицы. Дополнительные сведения см. в разделе SyncTable.

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

Адаптер синхронизации

Адаптер синхронизации, который является аналогом адаптера обработки данных в ADO.NET, определяется для каждой синхронизируемой таблицы. Адаптер синхронизации передает службе синхронизации сервера определенные команды, необходимые для взаимодействия с базой данных сервера, например InsertCommand, которая выполняет операции вставки из клиентской базы данных в базу данных сервера. Поскольку адаптеры синхронизации используют объект ADO.NETDbCommand, может быть использована любая структура команд, совместимая с ADO.NET. Это относится к встроенным инструкциям Transact-SQL, хранимым процедурам, представлениям, функциям и так далее. Командам требуется только один результат, определяющий структуру и данные, которые должны быть переданы и применены. Дополнительные сведения см. в разделах SyncAdapter и Как задать синхронизацию моментальными снимками, с загрузкой, с передачей и двунаправленную.

Посредник, служба и транспорт

Посредник, служба и транспорт используются в многоуровневых архитектурах и основанных на службах архитектурах. Библиотека Microsoft.Synchronization.Data.Server.dll используется в многоуровневых приложениях, но находится не на клиенте. Обычно эта DLL-библиотека находится на среднем уровне, имеющем прямое соединение с базой данных сервера. В этом случае для взаимодействия между клиентом и средним уровнем необходимы посредник и служба.

  • Код приложения на клиенте запрашивает службу синхронизации сервера, но не напрямую, а через посредник (ServerSyncProviderProxy). Посредник взаимодействует со службой на среднем уровне.

  • На среднем уровне служба наследует и предоставляет те же методы, что и ServerSyncProvider (абстрактный класс, от которого наследуется DbServerSyncProvider). После этого методы службы синхронизации сервера выполняются через прямое соединение с базой данных сервера. Результаты через средний уровень возвращаются на сторону клиента.

Дополнительные сведения см. в разделе Как настроить многоуровневую синхронизацию;

В приложениях на основе служб библиотека Microsoft.Synchronization.Data.Server.dll на клиенте не используется. Функциональность, обычно предоставляемая службой синхронизации сервера и адаптерами синхронизации, должна обеспечиваться приложением.

  • Код приложения на клиенте обращается через посредник к коду приложения, который обрабатывает задачи службы синхронизации сервера, например получение изменений из источника данных. Посредник взаимодействует со службой на среднем уровне.

  • На среднем уровне служба наследует и предоставляет те же методы, что и ServerSyncProvider (абстрактный класс, от которого наследуется DbServerSyncProvider). После этого методы выполняются кодом приложения через прямое соединение с базой данных сервера. Результаты через средний уровень возвращаются на сторону клиента.

Дополнительные классы в API-интерфейсе

На иллюстрациях в этом разделе показаны основные классы API-интерфейса. Помимо этого существует множество классов, которые здесь не показаны. Сведения обо всех доступных классах см. в разделах Microsoft.Synchronization, Microsoft.Synchronization.Data, Microsoft.Synchronization.Data.SqlServerCe и Microsoft.Synchronization.Data.Server. В следующих разделах даны общие сведения еще о четырех важных классах, с которыми необходимо ознакомиться.

Точка привязки синхронизации

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

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

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

Статистика сеанса синхронизации

Статистика сеанса представляет собой набор статистических данных, который агент синхронизации обеспечивает для каждого сеанса синхронизации. В нее входят данные о времени синхронизации, числе обработанных изменений и любых конфликтах и исключениях. Дополнительные сведения см. в разделах SyncStatistics и Как работать с событиями и бизнес-логикой программы.

Переменные сеанса синхронизации

Переменные сеанса представляют собой переменные, предоставляемые разработчику для использования в качестве параметров для команд выборки, вставки, обновления и удаления, выполняемых на сервере. Эти переменные могут использоваться для различных целей: для выявления конфликтов и предотвращения загрузки изменений в базу данных клиента более одного раза. Дополнительные сведения см. в разделах SyncSession и Как использовать переменные сеанса.

Построитель адаптера синхронизации SQL Server

Построитель адаптера синхронизации создан по образцу построителя команд в среде ADO.NET и позволяет разрабатывать код для команд синхронизации, выполняемых службой синхронизации сервера. Результатом его работы являются инструкции SELECT, INSERT, UPDATE и DELETE для баз данных SQL Server. Эти инструкции основаны на предоставленных пользователем данных о таблицах, задействованных в синхронизации. Дополнительные сведения см. в разделах SqlSyncAdapterBuilder и Средства для облегчения разработки приложений.

См. также

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

Сценарии работы вне сети
Приступая к работе: синхронизация клиента и сервера