Слой ArcGis Offline map изменяет синхронизацию
В своем приложении WPF я пытаюсь использовать функциональность автономной карты. Прямо сейчас мой сервис объектов настроен для синхронизации данных, и я могу создать реплику данных на сервере и загрузить локальную копию базы геоданных.
gdbSyncTask = await GeodatabaseSyncTask.CreateAsync(_featureServiceUri);
Envelope extent = new Envelope(xmin, ymin, xmax, ymax, new SpatialReference(wkidStart));
GenerateGeodatabaseParameters generateParams = await _gdbSyncTask.CreateDefaultGenerateGeodatabaseParametersAsync(extent);
_generateGdbJob = _gdbSyncTask.GenerateGeodatabase(generateParams, _gdbPath);
_generateGdbJob.JobChanged += GenerateGdbJobChanged;
_generateGdbJob.ProgressChanged += ((object sender, EventArgs e) =>
{
UpdateProgressBar();
});
_generateGdbJob.Start();
После начальной синхронизации я могу успешно работать с картой в автономном режиме. Это включает в себя такие операции, как добавление новых геометрий или редактирование существующих полигонов внутри локальной БД.
Тем не менее, когда я пытаюсь синхронизировать изменения обратно на сервер - я не получаю результатов.
Для синхронизации данных с локальной базой данных я использую следующий код:
SyncGeodatabaseParameters parameters = new SyncGeodatabaseParameters()
{
GeodatabaseSyncDirection = SyncDirection.Bidirectional,
RollbackOnFailure = false
};
Geodatabase gdb = await Geodatabase.OpenAsync(this.GetGdbPath());
foreach (GeodatabaseFeatureTable table in gdb.GeodatabaseFeatureTables)
{
long id = table.ServiceLayerId;
SyncLayerOption option = new SyncLayerOption(id);
option.SyncDirection = SyncDirection.Bidirectional;
parameters.LayerOptions.Add(option);
}
_gdbSyncTask = await GeodatabaseSyncTask.CreateAsync(_featureServiceUri);
SyncGeodatabaseJob job = _gdbSyncTask.SyncGeodatabase(parameters, gdb);
job.JobChanged += SyncJob_JobChanged;
job.ProgressChanged += SyncJob_ProgressChanged;
job.Start();
Все идет хорошо. Синхронизация заканчивается статусом "Успешно". Сообщения, зарегистрированные SyncGeodatabaseJob, похожи на экран ниже:
Однако, когда я открываю отредактированный векторный слой с сервера внутри веб-клиента карты, я не могу найти какие-либо локальные изменения. В базе данных обслуживания я также вижу, что во время синхронизации не было создано никаких новых записей.
Интересно, что когда я открываю данные "Реплика" внутри сети, я вижу следующую информацию:
Сервер реплики Gen: 2 Дата создания: 2018/02/07 10:49:54 UTC Дата последней синхронизации: 2018/02/07 10:49:54 UTC
"Данные последней синхронизации" соответствуют реплике "Дата создания". Однако в журнале реплик в ArcMap я вижу следующую информацию:
Может кто-нибудь сказать мне, как я должен интерпретировать вышеописанную ситуацию? Я пропускаю некоторые шаги в моем коде? Или, может быть, на сервере отсутствует какая-либо конфигурация? Похоже, что изменения данных успешно возвращаются в реплику на сервере, но после этого реплика не синхронизируется с базой данных сервера (должна ли она работать автоматически?).
Я "новичок" в разработке ArcGis, поэтому любая помощь будет оценена
2 ответа
Спасибо за ответы на все вопросы. Случилось так, что в базе данных сервера включено управление версиями, и изменения в автономном режиме не были согласованы с сервером. После запуска сценария согласования / публикации ( http://desktop.arcgis.com/en/arcmap/10.3/manage-data/geodatabases/automate-reconcile-post-after-sync.htm) автономные изменения стали видны для другие пользователи системы.
Код выглядит хорошо при быстром просмотре, поэтому я предполагаю, что в настройке что-то происходит.
Что вы получаете от операции синхронизации после завершения синхронизации? Обратите внимание, что вы можете просто использовать await syncJob.GetResultsAsync
чтобы начать работу и ждать результатов.
Как настроен сервис объектов на сервере? Пожалуйста, обратитесь к https://enterprise.arcgis.com/en/server/latest/publish-services/linux/prepare-data-for-offline-use.htm для различных способов установить эти вещи.