关于扩展服务
关于扩展服务
概述
可扩展哪些服务类型?
可扩展 ArcGIS Server 地图服务和影像服务,包括地图服务和影像服务扩展,例如,要素服务。
有哪些扩展方式?
有两种方式可以扩展这些服务类型:
-
服务器对象扩展 (SOE)
对地图服务或影像服务进行功能扩展,为它们创建新的操作。
如果您要执行一些使用
ArcGIS 客户端 API
不容易完成的定义明确的业务逻辑,那么 SOE 是合适的。大多数 SOE 通过使用 ArcObjects 代码处理 GIS 数据和地图来做到这一点。相当于自定义一个 API 。 -
服务器对象拦截器 (SOI)
针对地图服务或影像服务的现有内置操作,允许您拦截对它们的请求,来执行自定义逻辑并更改这些服务的内置操作的行为。这些客户端可能是使用 ArcGIS API for Javascript、ArcGIS Runtime SDK 等构建的应用程序。
以下,export map操作,就是一个内置操作。
以下部分更详细地描述了每种类型。
服务器对象扩展 (SOE)
如果您想要为地图和影像服务创建新的操作,以扩展它们的基本功能,则 SOE 是合适的。
SOE 具有以下优势:
-
您可以将 SOE 公开为 REST Web 服务和 SOAP Web 服务,从而允许客户端轻松调用它们。事实上,REST SOE 会显示在 ArcGIS 服务目录中。
-
SOE 非常有效地封装了 ArcObjects 逻辑,为快速执行调用提供了理想的环境。SOE 提供的是在 ArcGIS Server 上执行的粗粒度方法,避免了从客户端向服务器进行大量调用。
如果您想公开 ArcObjects 的功能,而这些功能以任何其他方式都不可用,或者需要非常快速地执行,您可能会开发一个 SOE。SOE 适用于经验丰富的开发人员,需要了解各种开发平台。
你需要 SOE 吗?
- SOE 需要 Web 开发、ArcObjects 和编程语言(如 Java)或基于 .NET 的语言(如 C#)的知识。
- 它们还必须经过部署才能对您的服务器可用。
- 您必须开发应用程序逻辑来使用您在 SOE 上公开的新操作。
在 SOE 之前,您可能会考虑一些更简单的替代方案。
-
开发 SOE 的最简单替代方法可能是"创建完成业务逻辑的地理处理模型,然后将其作为服务发布"。
您可以使用
模型构建器
以交互方式拖放和连接所需工具,而无需编写 ArcObjects 代码。地理处理服务还允许异步执行,允许您开始工作、做其他事情,然后稍后再回来检查结果。地理处理服务有一个明确定义的接口,ArcGIS 客户端 API 和运行时 SDK 包括构建在这些 API 之上的应用程序,例如 Web AppBuilder。因此,与 SOE 不同的是,您无需进行大量自定义应用程序开发即可使用地理处理服务。
地理处理服务的一个缺点是它们占用的内存相对较大,并且运行速度可能比 SOE 慢。如果您每天只运行几次进程,这可能不是问题。但是,如果您每天多次运行一个流程,或者有许多并发用户,那么花时间构建 SOE 可能是值得的。许多开发人员过去曾为现在无需 ArcObjects 即可完成的各种任务编写 ArcObjects 代码。
服务器对象拦截器 (SOI)
SOI 适用于改变现有地图服务或影像服务操作
的行为,包括改变它们的扩展【例如,要素服务(feature service)】的操作的行为。
例如,您可以更改地图图像导出操作(Export Map)
的行为,可以使用 SOI 做到:
- 为所有地图图像添加水印
- 提供图层级别的安全性
- 通过用户角色,决定用户是否被允许或禁止访问
您需要 SOI 吗?
- SOI 需要 Web 开发、ArcObjects 和编程语言(如 Java)或基于 .NET 的语言(如 C#)的知识。
- 它们还必须经过部署过程才能对您的服务器可用。
在 SOI 之前,请考虑这是否是您需要的功能。
-
如果您希望使用新功能扩展您的服务器,请考虑使用 SOE 或地理处理模型和脚本。SOI 适用于以对现有客户端应用程序透明的方式在现有 ArcGIS Server 操作之上添加新功能或行为。
-
如果您想使用一系列扩展来完成一项或多项任务,您可以使用 SOI 来完成。多个 SOI 可以在一个或多个服务上链接在一起。您可以随时修改 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 以上