什么是服务器对象扩展?
服务器对象扩展模块 (SOE) 可用于扩展 ArcGIS 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 逻辑,从而为您快速执行调用提供了理想的环境。
如果要提供无法通过其他方式获得的 ArcObjects 功能或需要提供可快速执行的 ArcObjects 功能,您可能需要开发 SOE。
SOE 适用于经验丰富的开发人员并需要了解多种开发平台的知识。ArcObjects SDK for Java 和 Microsoft .NET Framework 包含了多个 SOE 示例以供查看。
开发 SOE 须知
SOE 开发需要您具备通过 Java 或 .NET 编程语言调用 ArcObjects 的知识。同时还需要了解 REST 或 SOAP 原理。
另外,要为除自动生成的 SOE 以外的 SOE 编写自定义属性页面,您必须了解 Windows 表单开发或 Java Swing(针对 ArcCatalog 页面)或使用超文本标记语言 (HTML) 和 JavaScript 进行 Web 表单开发(针对管理器页面)的知识。
是否需要 SOE?
SOE 的开发需要了解 Web 服务开发和 ArcObjects,并且必须进行部署以供服务器使用。在开发服务器对象扩展之前,您不妨考虑一些更容易的替代方案。
开发 SOE 最容易的方法,可能就是创建实现业务逻辑的地理处理模型,然后将该模型作为服务进行发布。可使用模型构建器以交互方式对需要的工具进行拖放和连接,而无需编写 ArcObjects 代码。地理处理服务同样支持异步执行功能,这样您可以开始作业、执行其他操作并随后返回来检查结果。
地理处理服务的缺点是占用的内存较大并且运行速度可能比 SOE 慢。如果您一天只运行某个流程几次,那么这不是什么问题。然而,如果一天要运行某个流程很多次,或者有许多并发用户,则花些时间来构建 SOE 是值得的。
以前许多开发人员针对不同任务编写 ArcObjects 代码,而现在无需 ArcObjects 便可实现这些任务。有关使用 ArcObjects 以外的其他方法来执行 Web 制图的详细讨论,请参阅服务器对象扩展的替代方法。