Skip To Content

Операция задачи: submitJob (REST)

Если тип выполнения сервиса геообработки является асинхронным, все задачи геообработки в рамках сервиса будут поддерживать только операцию (submitJob). Операция submitJob для длительных задач, которые служат для обработки больших наборов данных. Кроме того, сервер геообработки может создать результирующий картографический сервис с целью успешного выполнения задания. Поэтому операция submitJob подходит для выходных данных инструмента, не подлежащих передаче, таких как TIN, САПР и так далее, а также для выходных растровых данных, которые не могут отображаться веб-приложениями. В подобных случаях выходные данные будут отображаться сервером как результирующий картографический сервис, а клиенты смогут добавлять результирующий картографический сервис в свои веб-приложения.

Отправка задания с помощью submitJob

Шаблон URL для операции submitJobhttp://<gp-task-url>/submitJob. Клиент отправляет запрос для выполнения задачи с помощью операции submitJob. При отправке задания входные параметры задачи создаются в виде URL-адреса и отправляются на сервер аналогично операции executeTask. Когда сервер получает запрос на операцию submitJob он создает ресурс задания с уникальным идентификатором, известным как jobId, и возвращает этот идентификатор клиенту. Ответ сервера после выполнения операции submitJob для задачи геообработки будет содержать уникальный идентификатор задания (jobId) и статус задания (jobStatus), как показано ниже.

Ответ JSON на запрос submitJob

{ "jobId" : "ja892cd2a90d149db9a171fc86ff530b4",
               "jobStatus": "esriJobSubmitted"}

Проверка статуса задания

URL для ресурса задания – http://<task-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 для задачи Построение буфера для точек с одним выходным параметром 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://<job-url>/results/<param-name>. URL входных данных – http://<job-url>/inputs/<param-name>. Ответом этих ресурсов будет значение параметра в любом формате выхода (JSON, KML или 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-адрес.

Операция submitJob: коммуникация сервер/клиент

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

Сообщение об ошибке

Задание может не выполниться из-за недопустимых входных параметров, недоступных данных проекции или других сбоев геообработки. Если задание завершается с ошибкой, статус задания будет обновлен на 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 для операции Cancelhttps://<gp-task-url>/cancel. Когда сервер получает запрос на отмену, он изменяет статус задания на esriJobCancelling и пытается прервать выполнение задания. Сервер возвращает сообщение о статусе задания клиенту, как показано ниже:

Ответ JSON на запрос отмены


{
 "jobId": "ja892cd2a90d149db9a171fc86ff530b4",
 "jobStatus": "esriJobCancelling"
}

Клиент может продолжить опрашивать статус задания с помощью URL-адреса задания и отслеживать ход выполнения отмены задания. Кроме того, клиент может запросить отмену только тех заданий, которые имеют статус esriJobWaiting, esriJobSubmitted или esriJobExecuting. Если запрос на отмену применим к заданиям со статусом esriJobSucceeded или esriJobFailed, сервер возвращает сообщение об ошибке.

Связанные разделы