Cuando un servicio de geoprocesamiento se publica con el modo de ejecución asíncrona, las tareas de geoprocesamiento del servicio admitirán la operación (submitJob). La operación submitJob es adecuada para tareas de larga duración que procesan datasets de gran tamaño. Asimismo, el servidor de geoprocesamiento puede crear un servicio de mapas de resultado para una operación de trabajo satisfactoria. Por tanto, la operación submitJob es adecuada para las salidas de la herramienta que no se pueden transportar, como TIN, CAD, etc., y para salidas RasterData que no pueden ser renderizada por las aplicaciones web. Las salidas en tales casos se pueden renderizar como un servicio de mapas de resultado en el servidor y los clientes pueden agregar el servicio de mapas de resultado a sus aplicaciones web.
Presentar un trabajo utilizando submitJob
La plantilla de URL para la operación submitJob es http://<gp-task-url>/submitJob. El cliente envía una solicitud para ejecutar la tarea mediante la operación submitJob. Cuando se envía un trabajo, los parámetros de entrada de la tarea se construyen como una URL y se envían al servidor de forma similar a la operación executeTask. Cuando el servidor recibe una solicitud de una operación submitJob, crea un recurso de trabajo con un Id. único conocido como jobId y lo devuelve al cliente. La respuesta del servidor de la operación submitJob de la tarea de geoprocesamiento tendrá un identificador de trabajo único (jobId) y el estado del trabajo (jobStatus), como se presenta en la siguiente muestra de código:
Respuesta JSON de la solicitud submitJob
{ "jobId" : "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobSubmitted"}
Verificar estado del trabajo
La URL del recurso de trabajo es http://<task-url>/jobs/<jobId>. El cliente puede enviar peticiones periódicamente a través de la URL del trabajo y determinar el estado del trabajo. La respuesta del servidor para la solicitud de estados de trabajo incluirá jobId, jobStatus y los mensajes de la herramienta de geoprocesamiento, según el nivel de mensaje del servicio de geoprocesamiento. El siguiente JSON muestra la respuesta enviada por el servidor para solicitar un estado. Observe que cada mensaje tiene un tipo y una propiedad de descripción.
Respuesta JSON de la solicitud submitJob
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobExecuting", "messages": [ {
"type": "esriJobMessageTypeInformative", "description": "Submitted."
}, {
"type": "esriJobMessageTypeInformative", "description": "Executing..."
}
]
}
El ejemplo anterior muestra jobStatus como esriJobExecuting. Los otros códigos de estado del trabajo se describen en la siguiente tabla:
Códigos de jobStatus | Descripción |
---|---|
esriJobWaiting | El servidor está ocupado con otras peticiones. |
esriJobSubmitted | El servidor ha aceptado la solicitud de trabajo. |
esriJobExecuting | El servidor está ejecutando la tarea. |
esriJobSucceeded | El servidor completó el trabajo correctamente y los resultados de salida están disponibles. |
esriJobFailed | Error al ejecutar el trabajo debido a parámetros no válidos y fallos de otra herramienta de geoprocesamiento. |
esriJobCancelling | El servidor está cancelando la ejecución de la tarea basándose en la solicitud del cliente. |
esriJobCancelled | La solicitud para ejecutar la tarea fue cancelada por el cliente y el servidor finalizó la ejecución del trabajo. |
Resultado de tarea satisfactorio
Cuando el trabajo se ha completado correctamente (jobStatus = esriJobSucceeded), el servidor crea recursos nuevos para los parámetros de entrada y salida a los que se puede acceder con una URL. La respuesta de solicitud de estado del servidor incluirá información de las URL de resultados y de entrada. Un ejemplo de respuesta JSON de una tarea Puntos de zona de influencia con un parámetro de salida Output_Polygons se muestra a continuación. Observe que el valor de los parámetros de salida y entrada es una URL relativa, al contrario que en valor de resultado de una tarea de ejecución.
Respuesta JSON de un buen resultado de tarea
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobSucceeded", "results": {
"Output_Polygons": {
"paramUrl": "results/Output_Polygons"
}
}, "inputs": {
"Input_Features": {
"paramUrl": "inputs/Input_Features"
}
}, "messages": [ ]
}
Cuando una trabajo se haya completado de forma satisfactoria, el cliente debe enviar una solicitud para recuperar cada parámetro de salida. El cliente puede obtener los resultados de entrada o de salida utilizando las respectivas URL de recurso. La URL de resultado es http://<job-url>/results/<param-name>. La URL de entradas es http://<job-url>/inputs/<param-name>. La respuesta de estos recursos será el valor del parámetro y puede ser cualquier formato de salida JSON, KML o HTML en función de las solicitudes de cliente. A continuación, se presenta una respuesta JSON de muestra para el parámetro de salida Output_Polygons del tipo de datos GPFeatureRecordSetLayer. Observe que la respuesta tiene el nombre, el tipo de datos y el valor del parámetro.
Respuesta JSON de parámetro de salida de resultado
{
"paramName": "Buffer_Polygons", "dataType": "GPFeatureRecordSetLayer", "value": {
"displayFieldName": "", "geometryType": "esriGeometryPolygon", "spatialReference": {
"wkid": 102726, "latestWkid": 102726 }, "fields": [ {
"name": "FID", "type": "esriFieldTypeOID", "alias": "FID"
}, {
"name": "BUFF_DIST", "type": "esriFieldTypeDouble", "alias": "BUFF_DIST"
}, {
"name": "Shape_Length", "type": "esriFieldTypeDouble", "alias": "Shape_Length"
}, {
"name": "Shape_Area", "type": "esriFieldTypeDouble", "alias": "Shape_Area"
}
], "features": [{
"attributes": {
"FID": 1, "BUFF_DIST": 3280.83333333, "Shape_Length": 20613.401930152133, "Shape_Area": 3.381121258723078E7 }, "geometry": {"rings": [[ [ 7643591.499937415, 684676.8331969082 ], [ 7643683.927544653, 684675.5310036391 ] ...more ]]}
}], "exceededTransferLimit": false }
}
La siguiente imagen resume la comunicación servidor/cliente de una operación submitJob. Observe las solicitudes de estado periódicas enviadas por el cliente para determinar el estado del trabajo. El cliente puede determinar la duración entre cada solicitud de estado. Cuando el servidor ha completado correctamente la ejecución del trabajo, crea los recursos de resultado y entrada a los que se puede acceder a través de la URL.
Además, si el servicio de geoprocesamiento se ha publicado con Ver resultado con un servicio de mapas habilitado, el servidor crea un servicio de mapas de resultado de los parámetros de salida cuando se ha ejecutado la tarea de forma satisfactoria. Cada parámetro de salida del geodataset de la tarea corresponderá a una capa en el servicio de mapas y se dibujará en función de la simbología de la capa definida para los parámetros en las tareas.
Respuesta de error
Un trabajo puede fallar debido a parámetros de entrada no válido, a datos de proyecto inaccesible o a otros fallos de geoprocesamiento. Cuando un trabajo ha fallado, el estado del trabajo se actualiza a esriJobFailed. El cliente debe verificar el estado del trabajo mediante la dirección URL de trabajo para realizar el seguimiento de los fallos. A continuación, se muestra un JSON de respuesta a un error de una tarea fallida:
Respuesta de estado JSON con estado fallido esriJobFailed
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobFailed", "messages": [ {
"type": "esriJobMessageTypeInformative", "description": "Submitted."
}, {
"type": "esriJobMessageTypeInformative", "description": "Executing..."
}, {
"type": "esriJobMessageTypeError", "description": "Failed."
}
]
}
Cuando un trabajo falla, el servidor no crea recursos de entrada y resultado. Además, el servidor no puede crear un servicio de mapas de resultado, incluso si el servicio de geoprocesamiento tiene un servicio de mapas de resultado.
Cancelar trabajo
El cliente puede descartar la operación submitJoben cualquier momento durante la ejecución del trabajo e invocar la operación Cancel en el trabajo. La URL para la operación Cancel es https://<gp-task-url>/cancel. Cuando el servidor recibe una solicitud de cancelación, se modifica el estado del trabajo a esriJobCancelling e intentar detener la ejecución del trabajo. El servidor devuelve un mensaje de estado de trabajo al cliente como se muestra a continuación:
Respuesta JSON a la solicitud de cancelación
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobCancelling"
}
El cliente puede continuar con el sondeo del estado del trabajo mediante la dirección URL del trabajo y hacer un seguimiento del progreso de la anulación. Además, un cliente puede solicitar cancelar solo los trabajos que tienen el estado esriJobWaiting, esriJobSubmitted o esriJobExecuting. Si la solicitud de cancelación se emite para trabajos con los estados esriJobSucceeded o esriJobFailed, el servidor generará un mensaje de error.