Программирование распространенных задач синхронизации клиента и сервера
Примечание
Следующие сведения включаются в качестве справки для существующих приложений, поддерживающих только сценарии работы вне сети. Дополнительные сведения о разработке новых приложений см. в разделе Архитектура и классы для синхронизации базы данных.
В следующих подразделах этого раздела приведены дополнительные сведения, процедуры и полные примеры кода для распространенных задач синхронизации клиента и сервера, которые могут быть решены с помощью служб Sync Framework. Рекомендуется сначала просмотреть инструкции по отслеживанию изменений базы данных сервера, а затем хотя бы один из разделов о направлении синхронизации, прежде чем переходить к другим разделам.
В этом разделе
Как задать синхронизацию моментальными снимками, с загрузкой, с передачей и двунаправленную
Как инициализировать клиентскую базу данных и работать со схемой таблицы
Примеры приложений в разделах инструкций
Каждый раздел инструкций содержит как минимум одно приложение командной строки. Это приложение написано на языках C# и Visual Basic и демонстрирует конкретные функции API. Все приложения содержат код для выполнения синхронизации, смены клиента на сервер или наоборот и затем повторной синхронизации. Хотя было бы проще показать только примеры кода для определенной задачи или функции, а также легче понять, как работают службы Sync Framework, если увидеть отдельную функцию в достаточно полном контексте.
Каждое приложение содержит классы, относящиеся к описываемым функциям, а также следующие классы.
Program. Этот класс подготавливает синхронизацию и вызывает методы класса Utility. Класс Utility обрабатывает все функции, не относящиеся непосредственно к синхронизации, в частности сохраняет информацию о строке соединения и выполняет изменения в базе данных на сервере и клиенте.
SampleSyncAgent. Этот класс является производным от SyncAgent.
SampleServerSyncProvider. Этот класс является производным от DbServerSyncProvider. В тех примерах, где играют роль команды поставщика сервера, эти команды указаны вручную. В остальных случаях применяется класс SqlSyncAdapterBuilder, поскольку он требует меньше кода. Дополнительные сведения о командах поставщика сервера см. в разделе Как задать синхронизацию моментальными снимками, с загрузкой, с передачей и двунаправленную.
SampleClientSyncProvider. Этот класс является производным от SqlCeClientSyncProvider.
Все завершенные приложения являются двухуровневыми, что позволяет не задействовать службу для запуска приложений. Однако код разделен на отдельные классы, чтобы облегчить понимание использования кода в многоуровневой архитектуре. Дополнительные сведения о многоуровневых приложениях см. в разделе Как настроить многоуровневую синхронизацию.
Код для всех приложений был протестирован на Visual Studio 2008 и SQL Server Compact с пакетом обновления 1 (SP1), SQL Server 2005 с пакетом обновления 2 (SP2) и SQL Server 2008.
Запуск каждого приложения
Выполните сценарий Transact-SQL «Пользовательское отслеживание изменений для скриптов автономной работы» из раздела Инструкции по сценариям установки для поставщика базы данных. Этот скрипт создает базу данных, набор таблиц и триггеров, а также набор хранимых процедур. Для удаления и повторной вставки образца данных используйте хранимую процедуру usp_InsertSampleData.
Скопируйте код класса Utility из раздела Инструкции по классу Utility для поставщика базы данных. Вставьте этот код в каждое из приложений, предназначенных для запуска, либо создайте на его основе DLL-библиотеку и ссылайтесь на нее из каждого приложения.
Добавьте ссылки на следующие DLL-библиотеки.
Microsoft.Synchronization.dll
Microsoft.Synchronization.Data.dll
Microsoft.Synchronization.Data.Server.dll
Microsoft.Synchronization.Data.SqlServerCe.dll
System.Data.SqlServerCe.dll