Sync Framework v.2.1 и отслеживание изменений в SQL Express для N-уровня с прокси WCF - PullRequest
4 голосов
/ 14 августа 2011

Я с удовольствием использую SyncFx v.2.1 в приложении.На стороне клиента в настоящее время используется SQLCE, а на стороне сервера - Server 2008 r2.Я использую прокси-сервер SyncFx и размещаю серверный код SyncAdapterBuilder в службе WCF.У клиента есть SyncAgent и SyncTables, и он работает нормально.Я использую интегрированное отслеживание изменений SQL вместо отслеживания связанных изменений (так называемый пользовательский / область действия), потому что мне не разрешено изменять существующую схему.

Поэтому моя проблема заключается в том, что требования к системе изменились иМне необходимо использовать SQL Express на клиенте для поддержки хранимых процедур.

Почему бы не объединить репликацию?Требования также запрещают модификацию схемы или использование триггеров.Фактически исходная версия приложения использовала репликацию слиянием с SQLCE до перехода на SyncFx для SQLCE.

Так как же это сделать?Я прочитал много противоречивой информации и могу только предположить, что это происходит в ответ на постоянно развивающиеся версии SyncFx.Нет прямого примера того, как выполнить SQL to SQL Express с отслеживанием изменений на обоих.Кроме того, я пытаюсь перейти от функциональной реализации SQLCE к Express с как можно меньшими изменениями.Клиент уже может использовать любой тип БД, но нужно изменить только текущий процесс синхронизации.

Вот что я обнаружил, но не добился успеха.Я прочитал каждый ответ StackOverflow по этому вопросу и до сих пор не нашел способ сделать это, который действительно работает.

  1. Синхронизация базы данных: SQL Server и SQL Express N-Tier с WCF : Этот пример MS отлично работает с SyncOrchistrator, но предоставляет боковые таблицы отслеживания и триггеры.Мне не удалось изменить это таким образом, чтобы отслеживание изменений можно было использовать на клиенте и сервере.
  2. Синхронизация инфраструктуры с отслеживанием изменений SQL Server 2008 : StephaneT предлагает здесь простоПри использовании обычного подхода SQLCE с примером поставщика синхронизации SQL Express и методов SyncFx 2.0 потребуется только модификация таблицы на стороне клиента.К сожалению, все ссылки на этот пример поставщика SQL Express, по-видимому, удалены, и другие публикации из JuneT и даже Лиама Кавана на MSDN предлагают перейти к новому официальному SqlServerProvider вместо настраиваемой версии DbServerProvider.Проблема в том, что нигде нет примеров реализации этого, и я не смог понять это методом проб и ошибок.
  3. Синхронизация баз данных SQL Server 2008 по HTTP с использованием WCF & Sync Framework Raj приводит лучший пример (простой и легко переводимый в процессы SQLCE), к сожалению, он также использует SqlExpressClientSyncProvider, который, кажется, испарился из Интернета.Это также требует привязки таблицы для отслеживания клиентов, я думаю, что мне это сойдет с рук, поскольку мне не разрешено изменять схему на «существующих» таблицах.

Так что любые примеры, которые могут помочьмне.По сути, я хочу перенести существующий функционирующий SQLCE SyncFx через прокси-сервер с интегрированным отслеживанием изменений SQL с использованием SyncAgent на версию, которая работает для SQL Express без изменения существующей схемы или использования триггеров.Следует также упомянуть, что я интенсивно использую параметры фильтра, так как в репликации более 150 таблиц, и они будут очень большими без фильтров.Я читал некоторые ссылки, в которых говорилось, что SqlExpressClientSyncProvider не поддерживает фильтры, но я не могу проверить это, так как не могу найти ссылку на этот код, который все еще хорош.

Возможно, есть обновлениепримера Радж, который использует SqlServerSyncProvider

Заранее спасибо всем, кто может указать мне в правильном направлении!

1 Ответ

2 голосов
/ 15 августа 2011

проверьте эту ссылку, и вы все еще можете найти некоторые из ссылок для скачивания в области комментариев: http://www.8bit.rs/blog/2009/05/debugging-sql-express-client-sync-provider/

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

Что касается фильтрации, вы можете легко изменить запросы в адаптере, включив в них предложение фильтра.

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

...