Если тип выполнения сервиса геообработки является асинхронным, все задачи геообработки в рамках сервиса будут поддерживать только операцию Отправить задание (submitJob). Операция submitJob подходит для длительных задач, которые служат для обработки больших наборов данных. Кроме того, сервер геообработки может создать результирующий картографический сервис с целью успешного выполнения задания. Поэтому операция submitJob подходит для выходных данных инструмента, не подлежащих передаче, таких как TIN, САПР и т. д., а также для выходных растровых данных, которые не могут отображаться веб-приложениями. В подобных случаях выходные данные будут отображаться сервером как результирующий картографический сервис, а клиенты смогут добавлять результирующий картографический сервис в свои веб-приложения.
Отправка задания с помощью submitJob
Шаблон URL-адреса для операции submitJob выглядит следующим образом: http://<url-задачи-го>/submitJob. Клиент отправляет запрос для выполнения задачи с помощью операции submitJob. При отправке задания входные параметры задачи создаются в виде URL-адреса и отправляются на сервер аналогично операции executeTask. Когда сервер получает запрос на операцию submitJob, он создает ресурс задания с уникальным идентификатором, известным как jobId, и возвращает этот идентификатор клиенту. Ответ сервера после выполнения операции submitJob для задачи геообработки будет содержать уникальный идентификатор задания (jobId) и статус задания (jobStatus), как показано ниже.
Ответ JSON на запрос submitJob
{ "jobId" : "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobSubmitted"}
Проверка статуса задания
URL-адрес ресурса задания: http://<url-задачи>/jobs/<jobId>. Клиент может периодически отправлять запросы через URL-адрес задания и определять статус этого задания. Ответ сервера на запрос статуса задания будет включать jobId, jobStatus и сообщения инструмента геообработки в зависимости от уровня сообщений сервиса геообработки. В JSON ниже показан ответ, отправленный сервером на запрос статуса. Обратите внимание, что каждое сообщение имеет тип и свойство описания.
Ответ JSON на запрос статуса
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobExecuting",
"messages": [
{
"type": "esriJobMessageTypeInformative",
"description": "Submitted."
},
{
"type": "esriJobMessageTypeInformative",
"description": "Executing..."
}
]
}
В приведенном выше примере jobStatus показан как esriJobExecuting. Другие статусы задания приведены в следующей таблице
Коды jobStatus | Описание |
esriJobWaiting | Сервер занят ответами на другие запросы. |
esriJobSubmitted | Сервер принимает запрос на задание. |
esriJobExecuting | Сервер выполняет задание. |
esriJobSucceeded | Сервер успешно завершил задание, и доступны выходные результаты. |
esriJobFailed | Задание завершилось со сбоем из-за недопустимых параметров или других сбоев инструментов геообработки. |
esriJobCancelling | Сервер отменяет выполнение задания на основе клиентского запроса. |
esriJobCancelled | Запрос на выполнение задания был отменен клиентом, и сервер прервал выполнение задания. |
Успешный результат выполнения задачи
Если задание успешно завершено (jobStatus = esriJobSucceeded), сервер создает новые ресурсы для входных и выходных параметров, доступ к которым можно получить через URL-адрес. Ответ сервера на запрос статуса будет включать информацию о URL-адресе для входных данных и результатов. Ниже приводится пример ответа JSON для задачи Построение буфера для точек (Buffer Points) с одним выходным параметром Output_Polygons. Обратите внимание, что значение выходных и входных параметров является относительным URL-адресом в отличие от значения результата задачи execute.
Ответ JSON об успешном результате задачи
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobSucceeded",
"results": {
"Output_Polygons": {
"paramUrl": "results/Output_Polygons"
}
},
"inputs": {
"Input_Features": {
"paramUrl": "inputs/Input_Features"
}
},
"messages": [
]
}
В конце успешного завершения задания клиент должен отправить запрос на получение каждого выходного параметра. Клиент может получить входные или выходные результаты путем использования соответствующих URL-адресов ресурсов. URL-адрес результата: http://<url-задания>/results/<имя-параметра>. URL-адрес входных данных: http://<url-задания>/inputs/<имя-параметра>. Ответом этих ресурсов будет значение параметра в любом формате выхода (JSON/KML/AMF/HTML) в зависимости от клиентских запросов. Ниже приведен пример ответа JSON на выходной параметр Output_Polygons типа данных GPFeatureRecordSetLayer. Обратите внимание, что в ответе присутствует имя параметра, тип данных и значение параметра.
Ответ JSON на выходной параметр результата
{
"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
}
}
На приведенном ниже рисунке сведено взаимодействие сервера и клиента при выполнении операции submitJob. Обратите внимание на периодические запросы о статусе, отправляемые клиентом для определения состояния задания. Клиент может задать временной интервал между каждым запросом о статусе. Если сервер успешно завершил выполнение задания, он создает ресурсы результатов и входных данных, доступ к которым можно получить через URL-адрес.
Также, если сервис геообработки был опубликован с включенным параметром Просмотреть результат с помощью картографического сервиса (View result with a map service), сервер создает результирующий картографический сервис для выходных параметров по окончанию успешного выполнения задачи. Каждый выходной параметр набора геоданных в задаче будет соответствовать слою картографического сервиса, и будет отображаться в зависимости от символов слоя, определенных для параметров задач.
Сообщение об ошибке
Задание может завершиться со сбоем из-за недопустимых входных параметров, недоступных данных проекции или других сбоев геообработки. Если задание завершается с ошибкой, статус задания будет обновлено на esriJobFailed. Клиент должен проверить статус задания с помощью URL-задания для отслеживания сбоев заданий. Ниже приведен ответ на ошибку JSON для сбойной задачи.
Ответ JSON о статусе в esriJobFailed
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobFailed",
"messages": [
{
"type": "esriJobMessageTypeInformative",
"description": "Submitted."
},
{
"type": "esriJobMessageTypeInformative",
"description": "Executing..."
},
{
"type": "esriJobMessageTypeError",
"description": "Failed."
}
]
}
После сбоя задачи сервер не будет создавать ресурсы входных данных и результатов. Кроме того, сервер не может создать картографический сервис для сохранения результатов, даже если сервис геообработки имеет сопутствующий результирующий картографический сервис.
Отменить задание
Клиент может решить отменить операцию submitJob в любое время во время выполнения задания, вызвав операцию Cancel, применимую к этому заданию. URL-адрес для задания Cancel: http://<url-задачи-го>/cancel. Когда сервер получает запрос на отмену, он изменяет статус задания на esriJobCancelling и пытается прервать выполнение задания. Сервер возвращает сообщение о статусе задания клиенту, как показано ниже.
Ответ JSON на запрос отмены
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobCancelling"
}
Клиент может продолжить опрашивать статус задания с помощью URL-адреса задания и отслеживать ход выполнения отмены задания. Кроме того, клиент может запросить отмену только тех заданий, которые имеют статус esriJobWaiting, esriJobSubmitted или esriJobExecuting. Если запрос на отмену задания применяется к заданиям со статусами esriJobSucceeded или esriJobFailed, сервер возвращает сообщение об ошибке.