Skip To Content

Практика кодирования для расширений

Для расширения возможностей картографического сервиса или сервиса изображений (SOE или SOI), обычно создается код, отображающий необходимые интерфейсы и реализующий вашу бизнес-логику. Начать создание расширения можно с помощью мастера надстройки Eclipse. Использование мастера гарантирует, что в расширении будут использоваться необходимые интерфейсы и возможность ответа на запросы веб-сервисов REST или SOAP с помощью классов SOESupport.

Подробные инструкции по кодированию расширения вы можете найти в документации для используемого вами SDK.

Допустимые классы и интерфейсы

Классы и интерфейсы, которые разрешено использовать при разработке SOE и SOI, зависят от используемого вами SDK.

ArcObjects SDKs (для .NET и для Java)

Расширения поддерживаются только для картографических сервисов и сервисов изображений. Так как картографические сервисы и сервисы изображений используют файл определения сервиса и не осуществляют прямого доступа к документу карты (MXD), имеются некоторые классы, которых следует избегать и другие классы, которые предпочтительны при написании расширений.

Избегайте использования ArcObjects из библиотеки Carto, которая специально разработана для использования с MXD. К ним относятся IMap, ILayer и элементы фреймов данных и компоновок страницы. Вместо этого используйте ArcObjects, разработанные для работы с картографическими сервисами, например, MapServer, MapLayerInfos и MapDescription. Используйте IMapServerDataAccess для доступа к набору данных, который лежит под каждым слоем в вашей карте.

Библиотеки, которые не относятся непосредственно к документу карты, например, com.esri.arcgis.geometry и com.esri.arcgis.geodatabase, всегда разрешены для использования с расширениями.

ArcGIS Enterprise SDK

Расширения поддерживаются только для картографических сервисов.

ArcGIS Enterprise SDK поставляется с набором базовых библиотек для облегчения разработки пользовательских расширений. Все классы и интерфейсы, доступные в этом SDK, были разработаны для использования в расширениях и разрешены для использования.

Советы по использованию перехватчиков серверных объектов

При создании перехватчиков серверных объектов (SOI) необходимо обрабатывать все типы входящих запросов, даже если SOI предназначен только для расширения одной или нескольких из многочисленных операций, доступных с картографическими сервисами или сервисами изображений. В этом разделе описываются интерфейсы, которые необходимо обработать, и доступные подходы, в зависимости от наличия или отсутствия защиты связанных функций.

Перехват сервисных запросов REST, SOAP и OGC

Картографические сервисы и сервисы изображений поддерживают три различных типа запросов:

  • Запросы REST API
  • Запросы SOAP API
  • Запросы OGC

Чтобы SOI перехватывал эти запросы, необходимо обеспечить следующие интерфейсы:

  • IRESTRequestHandler – для обработки запросов REST API
  • IRequestHandler2 (для SDK ArcObjects) или IRequestHandler (для SDK ArcGIS Enterprise ) – для обработки запросов SOAP API, в том числе запросов от таких клиентов ArcGIS for Desktop (как ArcMap и ArcGIS Pro)
  • IWebRequestHandler – для обработки запросов OGC

Даже если определенная конфигурация сервиса не поддерживает запросы OGC, необходимо обрабатывать все вышеуказанные интерфейсы. В зависимости от используемой бизнес-логики, имеется два подхода.

Вы создаете SOI, который будет выполнять функции защиты, рекомендуется начать с построения всех вышеуказанных интерфейсов и блокировки всех запросов. После создания собственного кода можно логически разрешить доступ через все эти интерфейсы. Если не заблокируете входящие запросы в начале, а затем разрешите доступ, появится большой риск случайной демонстрации уязвимости в системе безопасности.

Если функции защиты использоваться не будут, можно создать три интерфейса, пропустив все запросы через базовый стандартный механизм, чтобы обеспечить нормальное функционирование. Затем последовательно добавьте дополнительную бизнес-логику к одной или нескольким операциям, которые вы хотите расширить.

Когда сервис будет настроен на использование SOI, рабочая среда сервера будет перенаправлять все запросы сервиса к SOI. К области ответственности SOI относится фильтрация запросов, передача запроса к актуальной карте или объектам сервиса изображений (если применимо), и, при желании, дополнительная обработка запросов перед их возвратом клиенту.

Использование контроля доступа на уровне слоя

Если вы хотите использовать с помощью SOI контроль доступа на уровне слоя, вам также необходимо настроить обработчик REST ArcGIS Server, чтобы отключить кэширование всех ресурсов слоя, входящих в сервис. Это позволит перехватывать операции и отфильтровывать слои, использование которых не разрешено. Это можно отключить, задав свойству сервиса disableCaching значение true в ArcGIS Server Administrator Directory.

  1. Откройте ArcGIS Server Administrator Directory и войдите в систему. Зачастую, URL-адрес имеет формат https://gisserver.domain.com:6443/arcgis/admin.
  2. Щелкните сервисы и выберите имя нужного сервиса. Если сервис не отображается в списке, он может находиться в папке этой директории.
  3. Выберите Редактировать.
  4. В разделе properties сервиса JSON, добавьте свойство disableCaching и задайте для него значение true, например:
    "properties": {
      ...
      "disableCaching": "true",
      ...
     },
  5. Щелкните Сохранить изменения.

Создание файла .soe

Расширения (SOE или SOI) хранятся в файле .soe. Файл .soe содержит всю информацию, необходимую для регистрации расширения на ArcGIS Server. Вы создадите файл .soe с помощью мастера, встроенного в Eclipse. Файл .soe также можно создать с помощью утилит командной строки, предоставляемых Esri, которые можно запускать вручную или включать в автоматизированные скрипты построения.

Расширения, разработанные с использованием ArcGIS Enterprise SDK, имеют суффикс _ent, присоединенный к имени файла .soe. Например, расширение с именем SimpleRESTSOE будет иметь выходное имя файла SimpleRESTSOE_ent.soe.