Geoprocessor Job does not exist or is inaccessible

3266 ワード

ArcGIS api for JavaScriptを適用してGP等値線呼び出しを行うと、F 12デバッグで「jobid」Job does not exist or is inaccessibleエラーが発生し、このGP Taskの生成結果が存在しないか使用できないことを意味する.
しかしGP Taskの結果を載せたC:arcgisserverarcgisjobsディレクトリの下で確かにこのjobidの結果を生成して、よく分析してネット上で探して、問題が現れるべきだと感じます:gp.submitJob(parms, jobResult_Async);
つまりGP Taskがまだ実行中の時、jobResult_Async(またはその前の関数)がすでに実行され、まだ完全に実行されていないタスクを調整した結果、それは調整できないに違いない.特に時間がかかるGPタスクは、さらにエラーになる.(この問題はArcGIS S 10.0で遭遇したもので、バグでしょう)
解決方法:
方法1:非同期呼び出しを同期呼び出しに置き換える(解決可能)
従来の非同期をgp実行する.submitJob(parms,jobResult_Async)は、(等値線を例に)
gp.execute(parms,jobResult_Tb);
function jobResult_Tb(result){
	addResults(result[0].value.features);
}
function addResults(results) {
var features=results;
	for (var f = 0, fl = features.length; f < fl; f++) {
		var feature = features[f];
		var symbol = new esri.symbols.SimpleLineSymbol(
				esri.symbols.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([
						160, 32, 240 ]), 1);
		feature.setSymbol(symbol);
		esrimap.graphics.add(feature);
	}
}

自ら実践した結果、問題を解決することができる.
方法2:setUpdateDelay(解決可能)
gp.submitJob(parms,jobResult_Async)の前に:
gp.setUpdateDelay(3000);
gp.submitJob(parms, jobResult_Async);
//   result
function jobResult_Async(result) {
	jobId = result.jobId;
	var status = result.jobStatus;
	if (status === esri.tasks.JobInfo.STATUS_SUCCEEDED) {
		//     ,         ,         
		//     ,        ,         
		gp.getResultData(jobId, "Contour_Output", addResults);
	}
}
function addResults(results) {
	var features = results.value.features;//          
	for (var f = 0, fl = features.length; f < fl; f++) {
		var feature = features[f];
		var symbol = new esri.symbols.SimpleLineSymbol(
				esri.symbols.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([
						160, 32, 240 ]), 1);
		feature.setSymbol(symbol);
		// gl_stations.add(feature);
		esrimap.graphics.add(feature);
	}
}

setuUpdateDelay(5000)は面白いですが、デバッグ分析の結果、筆者は以下のことを発見しました.
5秒に達するとGPタスクの実行が終了するとjobResult_が実行されるAsync
GPタスクが5秒経過しても実行中の場合(arcgisjobsでファイルが生成中)は、5*2つまり10秒経過後にjobResult_を実行するAsyncは、タスクが完了したかどうかにかかわらず、
つまり、この方法で発生した問題を解決するには、arcgisjobsの下でGPタスクを実行するのにどれくらいの時間がかかるかを見積もる必要があります.その後、15秒などの時間を追加すると、setuUpdateDelay(20000、25000)と書くことができます.あるタスクが20秒後に実行されていない場合は、プログラムは40秒まで待ってjobResult_を実行します.Async、40秒後にまだ実行が終わっていない場合は、申し訳ありませんが、前の同じエラーを報告します.
方法3:gpError(この問題を解決する方法は卵が痛い)
gp.submitJobの後にgpError関数、すなわちGPタスクに問題が発生したときに実行できます.
function gpError(e) {
    if (e.message.search("does not exist or is inaccessible") > -1) {
        var jobId = e.message.replace(/Job '([a-z,0-9]*)' does not exist or is inaccessible\./, "$1");
        gp.getResultData(jobId, "Output_PDF");
    }
    else {
        showDialog(dojo.string.substitute('

Error: ${error}

', { error: e.message })); } }

どうですか.気持ち悪いでしょう、エラーが発生した関数の中でタスクの結果を呼び出します...試したことがないので、見ていると卵が痛いです.
方法4:ArcGIS 10.1以降(試行なし)
このエラーはArcGIS 10.0で発生したもので、ネット上では高バージョンに変えれば良いと言われていますが、これは10.0のバグです
システムは多くのGPサービスにかかわっているため、バージョンを変えるには多くの変更が必要であるため、筆者は試みていない.
方法5:ArcGIS ServerリリースGPとプログラムを2つのマシンに分ける(試行なし)
ネット上での解決策としてはGPサービスとプログラムを2つの機器に分けても問題はないということもありますが、本事業の展開条件に合わないため、筆者は試していません.
ありがとうございます!