Wenn ein Geoverarbeitungs-Service mit dem asynchronen Ausführungsmodus veröffentlicht wird, unterstützen die Geoverarbeitungs-Tasks dieses Service die Operation "Submit Job" (submitJob). Die Operation submitJob ist für längere Tasks geeignet, die große Datasets verarbeiten. Außerdem kann der Geoverarbeitungs-Server einen Karten-Service des Ergebnisses für eine erfolgreiche Auftragsausführung erstellen. Daher ist die Operation submitJob für nicht übertragbare Ausgaben von Werkzeugen wie TIN, CAD usw. geeignet, sowie für RasterData-Ausgaben, die von Webanwendungen nicht gerendert werden können. In solchen Fällen können die Ausgaben vom Server als Karten-Service des Ergebnisses gerendert werden, und Clients können den Karten-Service des Ergebnisses zu ihren Webanwendungen hinzufügen.
Senden eines Auftrags mithilfe von submitJob
Die URL-Vorlage für die Operation submitJob lautet http://<gp-task-url>/submitJob. Die Client sendet eine Anforderung zur Ausführung des Tasks über die Operation submitJob. Beim Senden eines Auftrags werden die Eingabeparameter des Tasks ähnlich wie beim Vorgang "executeTask" als eine URL erstellt und an den Server gesendet. Wenn der Server eine Anforderung für die Operation submitJob erhält, erstellt er eine Auftragsressource mit einer eindeutigen ID, die als jobId bezeichnet wird, und gibt sie an den Client zurück. In der Serverantwort der Operation submitJob des Geoverarbeitungs-Tasks wird eine eindeutige Auftragskennung (jobId) und ein Auftragsstatus (jobStatus) angegeben, wie nachfolgend dargestellt.
JSON-Antwort auf Anforderung "submitJob"
{ "jobId" : "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobSubmitted"}
Prüfen des Auftragsstatus
Die URL der Auftragsressource lautet http://<task-url>/jobs/<jobId>. Der Client kann über die Auftrags-URL regelmäßig Anforderungen senden und den Status des Auftrags ermitteln. In der Serverantwort auf die Auftragsstatusanforderung werden jobID, jobStatus und abhängig von der Meldungsebene des Geoverarbeitungs-Service Meldungen des Geoverarbeitungswerkzeugs angegeben. Die folgende JSON zeigt die Antwort, die vom Server auf die Statusanforderung gesendet wurde. Beachten Sie, dass in jeder Meldung ein Typ und eine Beschreibung angegeben ist.
JSON-Antwort auf Statusanforderung
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobExecuting",
"messages": [
{
"type": "esriJobMessageTypeInformative",
"description": "Submitted."
},
{
"type": "esriJobMessageTypeInformative",
"description": "Executing..."
}
]
}
Das obige Beispiel zeigt den jobStatus als esriJobExecuting. Die anderen Status des Auftrags werden in der folgenden Tabelle beschrieben.
jobStatus-Codes | Beschreibung |
esriJobWaiting | Der Server ist mit anderen Anforderungen ausgelastet. |
esriJobSubmitted | Der Server hat die Auftragsanforderung angenommen. |
esriJobExecuting | Der Server führt den Auftrag aus. |
esriJobSucceeded | Der Server hat den Auftrag erfolgreich ausgeführt, und die Ausgabeergebnisse sind verfügbar. |
esriJobFailed | Der Auftragsausführung ist aufgrund ungültiger Parameter oder anderer Fehler mit Geoverarbeitungswerkzeugen fehlgeschlagen. |
esriJobCancelling | Der Server bricht die Aufgabenausführung auf Aufforderung des Clients hin ab. |
esriJobCancelled | Die Anforderung zur Ausführung des Auftrags wurde vom Client abgebrochen, und der Server hat die Aufgabenausführung beendet. |
Task erfolgreich abgeschlossen
Wenn der Auftrag erfolgreich abgeschlossen wurde (jobStatus = esriJobSucceeded), erstellt der Server neue Ressourcen für die Eingabe- und Ausgabeparameter, auf die mithilfe einer URL zugegriffen werden kann. Die Serverantwort der Statusanforderung enthält Informationen zur URL mit den Eingaben und Ergebnissen. Ein Beispiel für eine JSON-Antwort eines Buffer Points-Tasks mit einem Ausgabeparameter, Output_Polygons, ist unten angegeben: Beachten Sie, dass der Wert der Ausgabe- und Eingabeparameter im Gegensatz zum Ergebniswert eines Ausführungs-Tasks eine relative URL ist.
JSON-Antwort eines erfolgreichen Task-Ergebnisses
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobSucceeded",
"results": {
"Output_Polygons": {
"paramUrl": "results/Output_Polygons"
}
},
"inputs": {
"Input_Features": {
"paramUrl": "inputs/Input_Features"
}
},
"messages": [
]
}
Am Ende einer erfolgreichen Aufgabenausführung muss der Client eine Anforderung senden, um jeden Ausgabeparameter abzurufen. Der Client kann die Eingabe- oder Ausgabeergebnisse mithilfe der entsprechenden Ressourcen-URLs abrufen. Die Ergebnis-URL lautet http://<job-url>/results/<param-name>. Die Eingabe-URL lautet http://<job-url>/inputs/<param-name>. Die Antwort von diesen Ressourcen ist der Wert des Parameters und kann basierend auf Client-Anforderungen jedes JSON/KML/AMF/HTML-Ausgabeformat aufweisen. Ein Beispiel für eine JSON-Antwort für den Ausgabeparameter Output_Polygons des Datentyps "GPFeatureRecordSetLayer" ist unten angegeben. Beachten Sie, dass die Antwort den Parameternamen, den Datentyp und den Wert des Parameters enthält.
JSON-Antwort eines Ergebnis-Ausgabeparameters
{
"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
}
}
Die folgende Abbildung bietet einen Überblick über die Server-/Client-Kommunikation einer submitJob-Operation. Beachten Sie, dass der Client regelmäßig Statusanforderungen senden kann, um den Status des Auftrags zu ermitteln. Der Client kann den zeitlichen Abstand zwischen den Statusanforderungen bestimmen. Wenn der Server die Ausführung des Auftrags erfolgreich abgeschlossen hat, erstellt er die Ergebnis- und Eingaberessourcen, auf die mithilfe der URL zugegriffen werden kann.
Wenn der Service mit der Option Ergebnisse mit einem Karten-Service anzeigen veröffentlicht wurde, erstellt der Server außerdem am Ende der erfolgreichen Aufgabenausführung einen Karten-Service des Ergebnisses der Ausgabeparameter. Jeder Geodataset-Ausgabe-Parameter des Task entspricht einem Layer im Karten-Service und wird basierend auf der Layer-Symbologie dargestellt, die für die Parameter in den Tasks definiert wurde.
Fehlerantwort
Ein Auftrag kann aufgrund ungültiger Parameter, nicht zugänglicher Projektdaten oder anderer Geoverarbeitungsfehler fehlschlagen. Wenn ein Auftrag fehlschlug, wird der Status des Auftrags in esriJobFailed geändert. Der Client muss den Status des Auftrags mithilfe der Auftrags-URL prüfen, um Auftragsfehler zu verfolgen. Das Fehlerantwort-JSON eines fehlgeschlagenen Tasks wird unten dargestellt.
Statusantwort-JSON mit dem Status "esriJobFailed"
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobFailed",
"messages": [
{
"type": "esriJobMessageTypeInformative",
"description": "Submitted."
},
{
"type": "esriJobMessageTypeInformative",
"description": "Executing..."
},
{
"type": "esriJobMessageTypeError",
"description": "Failed."
}
]
}
Wenn ein Auftrag fehlschlug, erstellt der Server keine Eingabe- und Ergebnisressourcen. Der Server erstellt auch keinen Karten-Service des Ergebnisses. Dies gilt auch, wenn der Geoverarbeitungs-Service einen zugehörigen Karten-Service des Ergebnisses aufweist.
Auftrag abbrechen
Der Client kann jederzeit während der Auftragsausführung beschließen, die Operation submitJob zu verwerfen, und die Operation "Cancel" aufrufen. Die URL zum Abbrechen des Auftrags lautet http://<gp-task-url>/cancel. Wenn der Server eine Anforderung zum Abbruch erhält, ändert er den Auftragsstatus in esriJobCancelling und versucht, die Auftragsausführung zu beenden. Der Server gibt an den Client eine Auftragsstatusmeldung zurück, wie unten dargestellt.
JSON-Antwort bei Abbruchanforderung
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobCancelling"
}
Der Client kann mithilfe der Auftrags-URL weiterhin den Status des Auftrags abrufen und den Fortschritt des Auftragsabbruchs verfolgen. Ein Client kann nur den Abbruch von Aufträgen mit dem Status esriJobWaiting, esriJobSubmitted oder esriJobExecuting anfordern. Wenn die Aufforderung zum Abbruch für Aufträge mit dem Status esriJobSucceeded oder esriJobFailed angefordert wird, wird vom Server eine Fehlermeldung ausgegeben.