Skip To Content

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

В этом разделе
Примечание:

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

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

Подробные инструкции о кодировании расширения можно найти в ArcObjects SDK. Также можно создавать расширения при помощи C++ в системе Windows, в ArcObjects SDK включен пример для C++.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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