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.
Puede encontrar instrucciones detalladas para la codificación de la extensión en el SDK de ArcObjects. 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 de ArcObjects adecuadas
Las extensiones solo se admiten para servicios 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.
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 que tiene 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 diferentes 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 manejar solicitudes de API SOAP, incluidas las solicitudes realizadas por los clientes de ArcGIS for Desktop (como ArcMap)
- 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.
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 a fin de permitir el funcionamiento normal. A continuación, vaya agregando lógica de negocio adicional a una o varias de 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 reales 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 for 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 del administrador de ArcGIS for Server.
- Abra el Directorio del administrador de ArcGIS for Server e inicie sesión. Normalmente, la URL tiene el formato http://gisserver.domain.com:6080/arcgis/admin.
- 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.
- Haga clic en editar.
- En la sección properties del servicio JSON, agregue la propiedad disableCaching y defina su valor en true, por ejemplo:
"properties": { ... "disableCaching": "true", ... },
- 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 for Server. Si está utilizando .NET, el archivo .soe se crea cuando se crea 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 utilizando las utilidades de línea de comandos que proporciona Esri y que se pueden ejecutar de forma manual o integradas en secuencias de comandos de creación automática.