Skip To Content

Prácticas de codificación para extensiones

Para ampliar un servicio de imágenes o de mapas (SOE o SOI), por lo general escribe el código que implementa algunas interfaces necesarias y realiza su lógica de negocio. Si está trabajando en Java, puede comenzar a crear una extensión utilizando un asistente de plug-in Eclipse. Si está trabajando en .NET, iniciará en Visual Studio con una plantilla del proyecto. El asistente y plantillas garantizan que su extensión implementa las interfaces necesarias y pueden responder a las llamadas del servicio web de REST to SOAP utilizando las clases de SOESupport.

Encontrará instrucciones detalladas para la codificación de extensiones en la documentación del SDK que está utilizando. También es posible crear una extensión con C++ en Windows, y se incluye un ejemplo en el ArcObjects SDK para C++.

Clases e interfaces adecuadas

Las clases e interfaces que se pueden utilizar al desarrollar SOE y SOI dependen del SDK que esté utilizando.

ArcObjects SDK (para .NET y Java)

Las extensiones solo se admiten para servicios dinámicos (no almacenados en caché) de mapas y de imágenes. Como los servicios de mapas y de imágenes utilizan un archivo de definición de servicio y no acceden directamente a un documento de mapa (MXD), hay ciertas clases que debe evitar y otras que debe favorecer al escribir extensiones.

Evite utilizar ArcObjects de la biblioteca Carto que están diseñadas específicamente para el uso con MXD. Esto incluye IMap, ILayer, y elementos relacionados con marcos de datos y diseños de página. En su lugar, utilice ArcObjects diseñados para trabajar con servicios de mapas, por ejemplo, y MapServer, MapLayerInfos MapDescription. Utilice la interfaz IMapServerDataAccess para acceder a los datasets subyacentes a cada capa en el mapa.

Las bibliotecas que no estén directamente relacionadas con el documento de mapa, como ESRI.ArcGIS.Geometry y ESRI.ArcGIS.Geodatabase para .NET o com.esri.arcgis.geometry y com.esri.arcgis.geodatabase para Java, siempre se pueden utilizar en extensiones.

ArcGIS Enterprise SDK

Solo se admiten extensiones para servicios de mapas.

ArcGIS Enterprise SDK se suministra junto con un conjunto básico de bibliotecas para facilitar el desarrollo de extensiones personalizadas. Las clases e interfaces disponibles en este SDK se han diseñado para utilizarlas en extensiones y se admite su uso.

Consideraciones sobre los interceptores de objetos del servidor

Al crear interceptores de objetos del servidor (SOI), debe manejar todos los tipos de solicitudes de entrada, incluso aunque su SOI solo esté pensado para mejorar una o algunas de las muchas operaciones que hay disponibles en los servicios de mapas e imágenes. En esta sección se detallan las interfaces que necesita manejar y los enfoques disponibles dependiendo de si está implementando una funcionalidad relacionada o no con la seguridad.

Intercepción de solicitudes de servicio REST, SOAP y OGC

Los servicios de mapas e imágenes admiten tres tipos de solicitudes:

  • solicitudes API REST
  • solicitudes API SOAP
  • Solicitudes OGC

Para que un SOI pueda interceptar estas solicitudes, debe implementar estas interfaces:

  • IRESTRequestHandler, para manejar solicitudes de API REST
  • IRequestHandler2 (para los ArcObjects SDK) o IRequestHandler (para ArcGIS Enterprise SDK), para manejar solicitudes de API SOAP, incluidas las solicitudes realizadas por ArcMap y ArcGIS Pro
  • IWebRequestHandler, para manejar solicitudes OGC

Aunque la configuración de un servicio concreto no admita solicitudes OGC, debe manejar todas las interfaces anteriores. Según la lógica de negocio que esté implementando, hay dos enfoques generales que puede adoptar.

Nota:

Si un servicio de mapas o imágenes contiene teselas en caché, las solicitudes realizadas en estas teselas no pueden interceptarse.

Si va a implementar un SOI que va a realizar funciones de seguridad, se recomienda que empiece por implementar todas las interfaces anteriores y que bloquee todas las solicitudes. A medida que vaya implementando su código personalizado, podrá permitir de forma lógica el acceso mediante las interfaces anteriores. Si en principio no bloquea las solicitudes de entrada y después va concediendo acceso según lo desee, corre más riesgo de exponerse accidentalmente a vulnerabilidades de seguridad.

Si no va a implementar ninguna funcionalidad de seguridad, podría implementar las tres interfaces transfiriendo todas las solicitudes mediante la implementación estándar subyacente para permitir el funcionamiento normal. A continuación, vaya agregando lógica de negocio adicional a las operaciones que desee mejorar.

Cuando se configura un servicio con un SOI, el marco del servidor enruta todas las solicitudes de servicio al SOI. Es responsabilidad del SOI filtrar las solicitudes, delegar la solicitud a los objetos del servicio de mapas o de imágenes (si procede) y, a continuación, y de forma opcional, procesar aún más las respuestas antes de devolverlas al cliente.

Implementar control de acceso en el nivel de capa

Si va a implementar un control de acceso en el nivel de capa a través de un SOI, también deberá configurar el controlador de REST de ArcGIS Server para desactivar el almacenamiento en caché de todos los recursos de capa incluidos en el servicio. Esto le permitirá interceptar las operaciones y filtrar las capas que no estén permitidas. Puede desactivarlo definiendo la propiedad disableCaching del servicio en true en el Directorio de administrador de ArcGIS for Server.

  1. Abra el Directorio de administrador de ArcGIS for Server e inicie sesión. La URL suele tener el formato https://gisserver.domain.com:6443/arcgis/admin.
  2. Haga clic en servicios y después en el nombre del servicio que desee. Si no lo ve en la lista, puede que esté dentro de una carpeta en este directorio.
  3. Haga clic en editar.
  4. En la sección properties del servicio JSON, agregue la propiedad disableCaching y defina su valor en true, por ejemplo:
    "properties": {
      ...
      "disableCaching": "true",
      ...
     },
  5. Haga clic en Guardar cambios.

Crear un archivo .soe.

Las extensiones (SOE o SOI) se encapsulan en un archivo .soe. El archivo .soe contiene toda la información necesaria para registrar su extensión en ArcGIS Server. Si está utilizando .NET, el archivo .soe se crea al crear el proyecto a partir de la plantilla. Si está utilizando Java, deberá crear el archivo .soe mediante un asistente integrado en Eclipse. El archivo .soe también se puede crear mediante las utilidades de línea de comandos de Esri, que se pueden ejecutar manualmente o integrar en scripts de creación automática.

Las extensiones desarrolladas con ArcGIS Enterprise SDK tienen el sufijo _ent incorporado a su nombre de archivo .soe. Por ejemplo, una extensión con el nombre SimpleRESTSOE tendrá el nombre de archivo de salida SimpleRESTSOE_ent.soe.