Wenn ein Geoverarbeitungsservice mit dem asynchronen Ausführungsmodus veröffentlicht wird, unterstützen die Geoverarbeitungs-Tasks dieses Service die Operation (submitJob). Die Operation submitJob ist für längere Tasks geeignet, die große Datasets verarbeiten. Außerdem kann der Geoverarbeitungsserver einen Kartenservice 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 Web-Apps nicht gerendert werden können. In solchen Fällen kann die Ausgabe vom Server als Kartenservice des Ergebnisses gerendert werden, und Clients können den Kartenservice des Ergebnisses zu ihren Web-Apps 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 bei der Operation "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 werden eine eindeutige Auftragskennung (jobId) und der Auftragsstatus (jobStatus) angegeben, wie im folgenden Codebeispiel gezeigt:
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 Geoverarbeitungsservice Meldungen des Geoverarbeitungswerkzeugs angegeben. Der folgende JSON-Code 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..."
}
]
}
Im obigen Beispiel wird für jobStatus der Status esriJobExecuting angezeigt. Die weiteren Statuscodes für den Auftrag 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 auf die Statusanforderung enthält Informationen zu den Eingabe- und Ergebnis-URLs. Ein Beispiel für eine JSON-Antwort eines Buffer Points-Tasks mit einemOutput_Polygons Ausgabeparameter 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 das Eingabe- oder Ausgabeergebnis mithilfe der entsprechenden Ressourcen-URL 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- oder HTML-Ausgabeformat aufweisen. Es folgt ein Beispiel für eine JSON-Antwort für den Ausgabeparameter Output_Polygons vom Datentyp "GPFeatureRecordSetLayer". Beachten Sie, dass die Antwort den Namen, 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 }
}
Das folgende Bild 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 Kartenservice anzeigen veröffentlicht wurde, erstellt der Server außerdem am Ende der erfolgreichen Aufgabenausführung einen Kartenservice des Ergebnisses der Ausgabeparameter. Jeder Geodataset-Ausgabe-Parameter des Task entspricht einem Layer im Kartenservice 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. Im Folgenden wird eine JSON-Fehlerantwort für einen fehlgeschlagenen Task angezeigt:
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 Kartenservice des Ergebnisses. Dies gilt auch, wenn der Geoverarbeitungsservice einen zugehörigen Kartenservice des Ergebnisses aufweist.
Auftrag abbrechen
Der Client kann jederzeit während der Auftragsausführung die Operation submitJob verwerfen und für den Auftrag die Operation Cancel aufrufen. Die URL für die Operation Cancel lautet https://<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 nachfolgend dargestellt:
JSON-Antwort auf eine Anforderung zum Abbruch
{
"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.