











可扩展哪些服务类型?
可扩展 ArcGIS Server 地图服务和影像服务,包括地图服务和影像服务扩展,例如,要素服务。
有哪些扩展方式?
有两种方式可以扩展这些服务类型:
服务器对象扩展 (SOE)
对地图服务或影像服务进行功能扩展,为它们创建新的操作。
如果您要执行一些使用 ArcGIS 客户端 API 不容易完成的定义明确的业务逻辑,那么 SOE 是合适的。大多数 SOE 通过使用 ArcObjects 代码处理 GIS 数据和地图来做到这一点。相当于自定义一个 API 。
服务器对象拦截器 (SOI)
针对地图服务或影像服务的现有内置操作,允许您拦截对它们的请求,来执行自定义逻辑并更改这些服务的内置操作的行为。这些客户端可能是使用 ArcGIS API for Javascript、ArcGIS Runtime SDK 等构建的应用程序。
以下,export map操作,就是一个内置操作。

以下部分更详细地描述了每种类型。
如果您想要为地图和影像服务创建新的操作,以扩展它们的基本功能,则 SOE 是合适的。
SOE 具有以下优势:
您可以将 SOE 公开为 REST Web 服务和 SOAP Web 服务,从而允许客户端轻松调用它们。事实上,REST SOE 会显示在 ArcGIS 服务目录中。
SOE 非常有效地封装了 ArcObjects 逻辑,为快速执行调用提供了理想的环境。SOE 提供的是在 ArcGIS Server 上执行的粗粒度方法,避免了从客户端向服务器进行大量调用。
如果您想公开 ArcObjects 的功能,而这些功能以任何其他方式都不可用,或者需要非常快速地执行,您可能会开发一个 SOE。SOE 适用于经验丰富的开发人员,需要了解各种开发平台。
在 SOE 之前,您可能会考虑一些更简单的替代方案。
开发 SOE 的最简单替代方法可能是"创建完成业务逻辑的地理处理模型,然后将其作为服务发布"。
您可以使用模型构建器以交互方式拖放和连接所需工具,而无需编写 ArcObjects 代码。
地理处理服务还允许异步执行,允许您开始工作、做其他事情,然后稍后再回来检查结果。地理处理服务有一个明确定义的接口,ArcGIS 客户端 API 和运行时 SDK 包括构建在这些 API 之上的应用程序,例如 Web AppBuilder。因此,与 SOE 不同的是,您无需进行大量自定义应用程序开发即可使用地理处理服务。
地理处理服务的一个缺点是它们占用的内存相对较大,并且运行速度可能比 SOE 慢。如果您每天只运行几次进程,这可能不是问题。但是,如果您每天多次运行一个流程,或者有许多并发用户,那么花时间构建 SOE 可能是值得的。许多开发人员过去曾为现在无需 ArcObjects 即可完成的各种任务编写 ArcObjects 代码。
SOI 适用于改变现有地图服务或影像服务操作的行为,包括改变它们的扩展【例如,要素服务(feature service)】的操作的行为。
例如,您可以更改地图图像导出操作(Export Map)的行为,可以使用 SOI 做到:
在 SOI 之前,请考虑这是否是您需要的功能。
如果您希望使用新功能扩展您的服务器,请考虑使用 SOE 或地理处理模型和脚本。SOI 适用于以对现有客户端应用程序透明的方式在现有 ArcGIS Server 操作之上添加新功能或行为。
如果您想使用一系列扩展来完成一项或多项任务,您可以使用 SOI 来完成。多个 SOI 可以在一个或多个服务上链接在一起。您可以随时修改 SOI 列表以及它们的执行顺序。
如果您需要实现自定义业务逻辑,例如默认地图或影像服务无法满足的安全或审计要求,您可能会决定创建 SOI。例如:
操作级别访问控制 - ArcGIS Server 仅支持为服务的所有用户启用服务操作或完全禁用访问。SOI 可以根据用户的角色过滤传入的请求,以实现对服务的操作级访问的控制。图层级别访问控制——ArcGIS Server 仅支持服务级数据访问控制:用户可以完全访问所有服务数据,或者用户没有访问权限。可以实施 SOI 以过滤对特定层的访问,甚至根据用户的角色过滤层内的数据。SOE/SOI 开发需要掌握知识:
如何通过 Java 或 .NET 编程语言,来使用 ArcObjects ;
使用 Java 开发的扩展模块可以部署到 ArcGIS for Server (Windows) 和 ArcGIS for Server (Linux)。
使用 .NET 开发的扩展模块只能部署到 ArcGIS for Server (Windows)。
关于 REST 或 SOAP 的原则。
如果想为扩展编写自定义属性页面,您必须了解 Windows 窗体开发,或 Java Swing(用于 ArcCatalog 页面)开发,或使用 HTML 和 JavaScript(用于管理器页面)进行 Web 表单开发。
只能为特定的服务类型开发扩展;地图服务或影像服务。
例如,您不能开发既适用于地图服务又适用于影像服务的通用扩展。在这种情况下,您必须为每种服务类型开发各自的扩展;一个用于地图服务,另一个用于影像服务。
SOE 和 SOI 的功能比较
| 功能 | SOE | SOI | 自定义GP服务 |
|---|---|---|---|
| 可以定制内置服务操作 | NO | YES | NO |
| 创建新的服务操作或端点 | YES | NO | YES |
| 需要自定义客户端应用程序 | YES | NO | NO |
| 支持异步执行 | NO | NO | YES |
| 支持的编程语言 | .NET / Java | .NET / Java | Python |
支持
| SOE | SOI | |
|---|---|---|
| MapServer | 10.3.1 或 10.3.1 以上 | |
| ImageServer | 10.8.1 或 10.8.1 以上 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。