У меня есть настольный клиент, который использует платформу синхронизации для синхронизации базы данных с сервером. У меня иногда возникают проблемы с этим "Очистка" отслеживания изменений таблиц.
Я провел некоторое исследование и нашел в Интернете сообщение, в котором содержится код, который сбрасывает привязки на столе и затем выполняет повторную синхронизацию. Это должно привести к повторной загрузке таблицы, что позволит обойти проблему. (Источник здесь)
Я реализовал код так:
= При синхронизации :: =
catch (SyncException ex)
{
Exception ex2 = ex.InnerException;
if (ex2.Message.Contains("cleaned up"))
{
try
{
syncStats = syncAgent.Synchronize(true);
//pass in true so removes anchors
catch (Exception anothererror)
{
//This will hit with another error equaling “Cleaned-up” on a table.
}
}
= Агент синхронизации :: =
public SyncStatistics Synchronize(bool reinit)
{
if (!reinit)
return base.Synchronize();
try
{
ClientSyncProvider sqlCeProvider;
sqlCeProvider = (ClientSyncProvider)this.LocalProvider;
foreach (SyncTable st in this.Configuration.SyncTables)
{
if (st.SyncDirection != SyncDirection.Snapshot)
{
// Null anchors here
sqlCeProvider.SetTableReceivedAnchor(st.TableName, new SyncAnchor());
}
}
}
catch (Exception ex)
{
}
return base.Synchronize();
}
Этот код обнаружит ошибку «очищенного» отслеживания изменений, затем вызовет Synchronize (true) и обнулит все якоря для каждой таблицы, затем он вызывает другую синхронизацию. Именно в этом и заключается смысл успешной синхронизации, но, к сожалению, это не тот случай, и он вызовет «catch (ex anothererror) {» с другим исключением «cleaned».
Есть идеи, где я иду не так?
Спасибо,
Кохан.