关于扩展服务

来源 目录

关于扩展服务

概述

可扩展哪些服务类型?

可扩展 ArcGIS Server 地图服务和影像服务,包括地图服务和影像服务扩展,例如,要素服务。

有哪些扩展方式?

有两种方式可以扩展这些服务类型:

  • 服务器对象扩展 (SOE)

    对地图服务或影像服务进行功能扩展,为它们创建新的操作

    如果您要执行一些使用 ArcGIS 客户端 API 不容易完成的定义明确的业务逻辑,那么 SOE 是合适的。大多数 SOE 通过使用 ArcObjects 代码处理 GIS 数据和地图来做到这一点。相当于自定义一个 API 。

  • 服务器对象拦截器 (SOI)

    针对地图服务或影像服务的现有内置操作,允许您拦截对它们的请求,来执行自定义逻辑并更改这些服务的内置操作的行为。这些客户端可能是使用 ArcGIS API for Javascript、ArcGIS Runtime SDK 等构建的应用程序。

    以下,export map操作,就是一个内置操作。

    image

以下部分更详细地描述了每种类型。

服务器对象扩展 (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 以上
posted @ 2022-04-02 16:39  误会馋  阅读(576)  评论(0编辑  收藏  举报