Службы синхронизации фактически не синхронизируются

Я пытаюсь синхронизировать базу данных SQL Server CE 3.5 с базой данных SQL Server 2008 с помощью MS Sync Services. Я использую VS 2008. Я создал локальный кэш базы данных, подключил его к SQL Server 2008 и выбрал таблицы, которые я хотел синхронизировать. Я выбрал отслеживание SQL Server. Он изменил базу данных для отслеживания изменений и создал локальную копию (SDF) данных.

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

Затем я создал еще один частичный класс для поставщика синхронизации сервера кэша и добавил обработчик событий в OnInitialized(), чтобы подключить его к событию ApplyChangeFailed. Этот код также работает нормально - мой код запускается при возникновении конфликта.

Наконец, я вручную внес некоторые изменения в данные сервера для проверки синхронизации. Я использую этот код для запуска синхронизации:

var agent = new FSEMobileCacheSyncAgent();
var syncStats = agent.Synchronize();

syncStats, кажется, показывает количество # изменений, которые я сделал на сервере, и показывает, что они были применены. Однако, когда я открываю локальный файл SDF, никаких изменений не происходит.

Я в основном следовал инструкциям, которые нашел здесь:

http://msdn.microsoft.com/en-us/library/cc761546%28SQL.105%29.aspx

и здесь:

http://keithelder.net/blog/archive/2007/09/23/Sync-Services-for-SQL-Server-Compact-Edition-3.5-in-Visual.aspx

Кажется, что в этот момент это должно "просто работать", но изменения, внесенные на сервере, отсутствуют в локальном файле SDF. Я предполагаю, что что-то упустил, но я просто не вижу этого прямо сейчас.

Я подумал, что это может быть из-за того, что я, похоже, использовал версию 1 Sync Services, поэтому я удалил ссылки на сборки Microsoft.Synchronization. *, Установил Sync Framework 2.0 и добавил новую версию сборок в проект. Это не имеет никакого значения.

Идеи?

Изменить: я хотел включить трассировку, чтобы увидеть, смогу ли я отследить это, но единственный способ сделать это - через приложение WinForms, так как для этого требуются записи в файле app.config (мой первоначальный проект был библиотекой классов). Я создал проект WinForms и воссоздал все, и вдруг все работает. Итак, по-видимому, для этого нужен проект WinForm по какой-то причине?

Это не совсем то, как я планировал использовать это - я надеялся запустить синхронизацию через другое приложение, не являющееся.NET, и предоставить там пользовательский интерфейс, чтобы конечный пользователь мог показаться немного более простым. Если я не могу этого сделать, это нормально, но мне бы очень хотелось узнать, если / как сделать так, чтобы это работало как проект библиотеки классов.

2 ответа

Вы можете загрузить файл конфигурации dll следующим образом (в конструкторе вашего класса):

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", System.IO.Path.Combine(Environment.CurrentDirectory, "<dll name>.config"));
System.Configuration.ConfigurationManager.RefreshSection("configuration");

Senario, который вы описываете, должен работать. У меня есть похожее приложение, которое использовало синхронизацию внутри класса, и это нормально.. Вам нужно иметь возможность устанавливать свойства трассировки, проще всего через app.config, но это не ваша проблема... Об ошибках не сообщалось метод Syncronize?

Конфликт ошибок не возник?

Если у вас все еще возникают трудности, вы можете добавить следующие биты в файл конфигурации вашего приложения, в разделе

   <switches>
      <add name="DefaultSwitch" value="Information" />
      <!-- Sync Tracer Setting 0-off, 1-error, 2-warn, 3-info, 4-verbose. -->
      <add name="SyncTracer" value="4" />
    </switches>

    <trace autoflush="true">
      <listeners>
        <add name="TestSyncListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\SyncTraceFile.txt" />
      </listeners>
    </trace>

Тогда посмотрите в c:\SyncTraceFile.txt для любых проблем.

Другие вопросы по тегам