通过 WFS 服务的 Web 编辑
当您发布启用了 WFS 功能的地图或者地理数据服务时,可通过 OGC 兼容的 WFS 客户端访问该数据。WFS 客户端也可以查看对数据所做的最新更改。
当从 WFS 客户端(例如,查看器)发出请求时,将返回相应数据,因为此时数据源中存在此数据。例如,假设有一个包含要素类的地图文档。此要素类来自于一个文件地理数据库。现在您将该地图文档作为地图服务发布并且启用 WFS 服务能力。带有 WFS 查看器的客户端可以使用由地图服务提供的 WFS 的 URL 访问要素类中的数据。
假设某人访问源文件地理数据库,并添加、更新和删除了要素类中的要素。带有 WFS 查看器的客户端下次刷新时,将显示最近编辑的数据。
当数据源为 ArcSDE 地理数据库时,地理数据服务和地图服务会发布特定版本的数据。如果数据是在此特定版本中进行了编辑,那么 WFS 客户端和非 WFS 客户端均能看到这些更改。但是,如果是在其他版本中进行了编辑,则只有使用已发布版本对更改进行协调之后,客户端才能看到这些更改。
上述功能可以使您对通过您的服务显示的数据进行更多控制。假设您从名为 WFS 的版本中发布带有 WFS 服务能力的某些数据。配有 WFS 查看器的客户端随后开始通过您的服务访问数据。与此同时,内业编辑人员在使用 ArcGIS 更新默认版本。如有必要,稍后将对编辑人员做出的更改进行检查和调整。一旦完成评估,WFS 版本将与默认版本进行协调。此时,WFS 客户端将看到编辑人员的最新更新。
事务性 WFS 服务
使用事务性 WFS 服务(有时称为 WFS-T),WFS 编辑器可以应用通过 WFS 服务对源数据库中的数据所做的更改。要通过 WFS-T 应用更改,数据必须来源于 ArcSDE 地理数据库。可在具有版本化数据、非版本化数据或者以上两者组合的服务上启用事务功能。如果您选择使用版本化数据,同样建议您由非默认版本发布服务。
有关如何创建事务性 WFS 服务的详细说明,请参阅教程:发布 WFS-T 服务。
一旦启用了事务功能,WFS 客户端便可使用事务性 WFS 方法应用对地理数据库的更改。下面是如何应用更改的示例:
- WFS 客户端连接到启用事务的已发布 WFS 服务。
- 在服务器上锁定所编辑的要素和行(可使用 GetFeatureWithLock WFS 方法执行此操作)。
- 在 WFS 客户端上使用 WFS 编辑器执行编辑。
- 随后在服务器上应用编辑(可使用事务性 WFS 方法执行此操作)。
当提交编辑内容后,将解除锁定并且要素可由其他 WFS 编辑器进行编辑。如果时间超时,锁定同样也可解除。默认情况下,五分钟后锁定将超时,但可通过使用 GetFeatureWithLock 方法指定一个超时分钟数来调整锁定时间。管理员可通过手动编辑配置和设置元素 DefaultLockExpiration(以分钟为单位的时间)来设置默认超时时间。
当客户端使用 DefaultLockExpiration 请求锁定时,将返回带有锁定要素的要素集合和一个锁定 ID。如果不能锁定任何请求要素,该请求将失败并且客户端需要再次调用 GetFeatureWithLock。只有解除这些要素的锁定之后,其他客户端才可以获取这些要素上的锁定。
仅插入事务不要求锁定要素。因为现有要素不能被修改(更新或删除),所以不必调用 GetFeatureWithLock。任何要求更新或删除的事务请求必须有锁定 ID。
当更改内容通过 WFS-T 提交时,它们将应用到已发布的版本(版本化数据)或应用到业务表格(非版本化数据)。当使用版本化数据或者非版本化数据时,您都需要注意以下部分讨论的重要工作流程差异。
WFS-T 服务和版本化数据
版本管理的功能允许您向 WFS 和非 WFS 编辑器显示您的地理数据库,也允许您通过完全冲突检测有效合并由两组用户所做的编辑。要合并编辑内容,您可以将发布的 WFS-T 版本与其父版本进行协调并提交发布的 WFS-T 版本。如果存在未完成的锁,系统不会允许继续执行协调与提交。这就可以防止 WFS-T 客户端锁定的要素与因为协调过程和提交过程更改的要素之间发生冲突。此外,协调和提交操作都会锁定要发布的版本,以防止在此过程中执行 GetFeatureWithLock 和事务调用。有关处理版本化数据的详细信息,请参阅版本化快速浏览。
要素锁定通过锁表的方法在服务器上保留相关信息。当事务被启用并且以常规表出现在地理数据库中时,将创建锁表。表的命名遵循 VERSION_<versionID>_ROW_LOCKS 约定。要防止协调和提交受到阻止,管理员可能要在协调和提交之前通过直接从锁表中删除行来删除未完成的锁定。
已发布的 WFS-T 版本不应使用 ArcGIS 进行编辑。ArcGIS 编辑器不会注意到要素的锁定,所以可对锁定的要素进行编辑。这这种情况下,在 ArcGIS 中所做的编辑可能会导致冲突,阻止 WFS-T 客户端上载所做的更改。如果更改被协调并提交到所发布版本中,则创建并编辑所发布版本的子版本可能也会引起类似的问题。
多个 WFS-T 服务可以引用相同的发布版本,因为所有的 WFS-T 服务都共享同一个锁表。发布版本与其锁表之间存在一对一的关联关系。
如果您禁用了事务功能或者将 WFS 服务移除,锁表不会自动删除。一旦不再有任何 WFS-T 服务引用此版本,您可选择手动删除相应的锁表。
WFS-T 服务和非版本化数据
如果您在 WFS-T 服务中发布了非版本化数据,编辑内容将直接应用到地理数据库的业务表中,所以一旦提交了编辑内容,就无法撤消。有关处理非版本化数据的详细信息,请参阅处理非版本化数据快速浏览。
对于基于非版本化数据的 WFS-T 服务,要素锁定同样保存在锁表的服务器上,该锁表是在服务上启用事务时创建的。如果您计划仅使用 WFS-T 客户端编辑服务,这将与基于服务的版本化数据的行为相同。但是,如果要使用非 WFS-T 客户端(例如,ArcMap)编辑服务中发布的数据,则需要牢一些重要的事项:
- ArcMap 编辑器不会注意到要素的锁定,所以您可以编辑通过 WFS-T 服务锁定的要素。
- 如果 ArcMap 编辑器编辑要素,这些要素将以对 WFS-T 客户端锁定的形式出现。所以只有 ArcMap 编辑器保存这些编辑内容之后,WFS-T 客户端才能锁定、更新或者删除这些要素。
如果您禁用了事务功能或者将 WFS 服务移除,锁表不会自动删除。一旦不再有任何 WFS-T 服务引用此版本,您可选择手动删除相应的锁表。
其他注意事项
- 当在要素类中启用编辑器追踪时,确保编辑内容被设置为按照协调世界时间 (UTC) 进行记录。WFS-T 服务不支持将“数据库时间”作为追踪编辑的时区。
- 必须为用于将 ArcGIS Server 连接到 ArcSDE 地理数据库的 DBMS 用户授予在 DBMS 中创建表格的权限,才能成功使用 WFS-T。
- ArcGIS for Desktop 不具有事务性 WFS 编辑的机制,这意味着您必须使用第三方客户端来编辑使用 WFS 的要素。
- 无法使用 WFS-T 编辑具有 z 值的要素类。