什么是服务器对象扩展?
服务器对象扩展 (SOE) 可用于扩展 ArcGIS for Server 的基本功能。大多数 SOE 是通过将 ArcObjects 代码与 GIS 数据和地图结合使用来实现此目标的。ArcObjects 是构建 ArcGIS 的核心组件,通过 ArcObjects 编写 GIS 功能可以提供最大的灵活性。
如果您要执行的明确定义的业务逻辑很难利用 ArcGIS Web API 来实现,这时就可以选择使用 SOE。SOE 具有以下优势:
-
可将 SOE 以表述性状态转移 (REST) 和/或简单对象访问协议 (SOAP) Web 服务的形式进行暴露,从而使构建于 ArcGIS Web API 上的客户端能够方便地对其进行调用。事实上,REST SOE 会显示在 ArcGIS 服务目录中并可暴露出 ArcGIS Web API 能够识别的典型对象类型(大多数采用 JSON 格式)。
-
构建 SOE 时,您只是提供在 ArcGIS Server 上进行工作的大致方法,而不是从客户端对服务器进行大量的调用。SOE 可非常有效地封装 ArcObjects 逻辑,从而为您快速执行调用提供了理想的环境。
如果要提供无法通过其他方式(通过开箱即用的地理处理工具或 ArcGIS Server 服务)获得的 ArcObjects 功能或需要提供可快速执行的 ArcObjects 功能,这时您可能就需要开发 SOE。
SOE 适用于经验丰富的开发人员并需要了解多种开发平台的知识。ArcObjects SDK for Java 包含了多个 SOE 示例以供查看。
SOE 主要为扩展地图服务而设计。
开发 SOE 须知
SOE 开发需要您具备通过 Java 调用 ArcObjects 的知识。同时还需要了解 REST 或 SOAP 原理。
另外,要为除自动生成的 SOE 以外的 SOE 编写自定义属性页面,您必须了解 Java Swing(针对 ArcCatalog 页面)或使用超文本标记语言 (HTML) 和 JavaScript 进行 Web 表单开发(针对管理器页面)的知识。
是否需要 SOE?
SOE 的开发需要了解 Web 服务开发和 ArcObjects,并且必须进行部署以供服务器使用。在开发服务器对象扩展之前,您不妨考虑一些更容易的替代方案。
开发 SOE 最容易的方法,可能就是创建实现业务逻辑的地理处理模型,然后将该模型作为服务进行发布。可使用模型构建器以交互方式对需要的工具进行拖放和连接,而无需编写 ArcObjects 代码。地理处理服务同样支持异步执行功能,这样您可以开始作业、执行其他操作并随后返回来检查结果。
地理处理服务的缺点是占用的内存较大并且运行速度可能比 SOE 慢。如果您一天只运行某个流程几次,那么这不是什么问题。然而,如果一天要运行某个流程很多次,或者有许多并发用户,则花些时间来构建 SOE 是值得的。
以前许多开发人员针对不同任务编写 ArcObjects 代码,而现在无需 ArcObjects 便可实现这些任务。有关使用 ArcObjects 以外的其他方法来执行 Web 制图的详细讨论,请参阅服务器对象扩展的替代方法。