任务操作:submitJob (REST)

当地理处理服务以异步执行模式发布时,服务的地理处理任务将支持“提交作业”(submitJob) 操作。submitJob 操作适合运行时间长、处理大型数据集的任务。同样,地理处理服务器可为成功的作业操作创建结果地图服务。因此,submitJob 操作适用于不可传输的工具输出(如 TIN、CAD 等)以及 Web 应用程序无法渲染的 RaterData 输出。这种情况下的输出可由服务器作为结果地图服务渲染,客户端可将结果地图服务添加到其 Web 应用程序。

使用 submitJob 提交作业

submitJob 操作的 URL 模板为 http://<gp-task-url>/submitJob。客户端可通过 submitJob 操作发送任务运行请求。提交作业时,任务的输入参数构建为 URL 并发送到类似于 executeTask 操作的服务器上。当接收到 submitJob 操作请求时,服务器将创建具有唯一 ID(称为 jobId)的作业资源并将其返回到客户端。地理处理任务 submitJob 操作的服务器响应将具有唯一作业标识符 (jobId) 和作业状态 (jobStatus),如下所示。

submitJob 请求的 JSON 响应

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

验证作业的状态

作业资源的 URL 为 http://<task-url>/jobs/<jobId>。客户端可定期通过作业 URL 发送请求并确定作业的状态。作业状态请求的服务器响应将包括 jobIdjobStatus 和地理处理工具消息(取决于地理处理服务的消息级别)。以下 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 的相关信息。输出参数为 Output_Polygons 缓冲点任务 JSON 响应的示例如下所示。请注意,输出和输入参数的值是相对 URL,与执行任务的结果值相反。

成功任务结果的 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/AMF/HTML 输出格式。数据类型 GPFeatureRecordSetLayer 的 Output_Polygons 输出参数的 JSON 响应示例如下。请注意,响应包含参数名称、数据类型和参数值。

结果输出参数的 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 如下所示。

具有 esriJobFailed 状态的状态响应 JSON

{
 "jobId": "ja892cd2a90d149db9a171fc86ff530b4",
 "jobStatus": "esriJobFailed",
 "messages": [
  {
   "type": "esriJobMessageTypeInformative",
   "description": "Submitted."
  },
  {
   "type": "esriJobMessageTypeInformative",
   "description": "Executing..."
  },
  {
   "type": "esriJobMessageTypeError",
   "description": "Failed."
  }
 ]
}

任务失败后,服务器将不会创建输入和结果资源。同样,即便地理处理服务附有结果地图服务,服务器仍无法创建结果地图服务。

取消作业

在作业执行过程中,客户端可随时放弃 submitJob 操作,并对作业调用“取消”操作。“取消”作业的 URL 为 http://<gp-task-url>/cancel。当接收到取消请求时,服务器会将作业状态修改为 esriJobCancelling,同时尝试终止执行作业。服务器将向客户端返回以下作业状态消息。

取消请求的 JSON 响应

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

客户端可继续使用作业 URL 对作业状态进行轮询,并追踪作业取消的进程。而且,客户端只能请求取消处于 esriJobWaitingesriJobSubmittedesriJobExecuting 状态的作业。如果请求取消处于 esriJobSucceededesriJobFailed 状态的作业,则服务器将返回错误信息。

相关主题

6/13/2014