在我的 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 记录的消息如下面的屏幕所示:
但是 - 当我从地图 Web 客户端内的服务器打开已编辑的要素图层时,我找不到任何本地更改。在服务数据库中,我还可以看到同步期间没有创建新记录。
有趣的是,当我在 web 中打开“副本”数据时,我可以看到以下信息:
副本服务器 Gen:2 创建日期:2018/02/07 10:49:54 UTC 最后同步日期:2018/02/07 10:49:54 UTC
“上次同步数据”等于副本“创建日期”但是,在 ArcMap 的副本日志中,我可以看到以下信息:
谁能告诉我应该如何解释上述情况?我的代码中是否缺少某些步骤?或者服务器上可能缺少某些配置功能?看起来数据修改已成功推送回服务器上的副本,但在该副本未与服务器数据库同步之后(它应该自动工作吗?)。
我是 ArcGis 开发方面的“新人”,因此我们将不胜感激