在ArcMap里创建GP模型时,一定要注意,设置“应用程序级别”的环境变量——即ArcCatalog或ArcMap Toolbox那里的环境变量,然后将里面用到的中间数据都指定为:
%scratchworkspace%/data,这样在ArcGIS Server里运行的时候,这些中间数据或结果数据就会生成到Server的job目录下的对应jobID里的scratch目录里去;否则在磁盘上固定目录下肯定会造成GP服务执行出错;
其它源数据可以和gp工具放在一个目录下,设置模型以相对路径保存,这样可以保证模型和数据的路径始终正确。
注意:1、数据的路径是%scratchworkspace%/数据名,中间不要加文件夹目录,否则在Desktop下执行的时候,我们可以在%scratchworkspace%下创建这个目录,但在Server里以服务执行的时候就没有这个目录了,会导致找不到数据路径的错误。
但是可以添加File GDB,如%scratchworkspace%/scratch.gdb/数据名,这样GP服务在运行时会在job目录下创建这个File GDB
2、更改GP服务数据源或参数等(对Model进行了修改),重启GP服务后,要清除rest缓存,否则会出错,典型的错误:
WARNING 001000: Z 值字段: 字段 ZZ不存在 值不存在。 ERROR 000732: XY 表: 数据集 数据库连接\OLE DB Connection.odc\CELL_INFO 不存在或不受支持 WARNING 001000: Z 值字段: 字段 ZZ不存在</Msg>
<Msg time='2012-05-08T15:10:16' type='ERROR' code='20010' target='cnds.GPServerSync' methodName='GPServerSync.CheckMessages' machine='BONE_NET' process='7188' thread='6832'>执行工具时出错。</Msg>
3、造成上述错误还有个可能原因,那就是找不到数据源(或者对数据源没有足够的权限)。
比如我们添加数据库里的空间图层或普通表,通常情况下数据源的输入参数是:数据库连接\OLE DB Connection.odc\SDE.ZTE_DATA,这种相对路径,有可能会导致上述错误。
解决:将数据源连接文件(OLE DB Connection.odc)拷贝到GP工具目录下,指定输入参数为绝对路径:E:\test\OLE DB Connection.odc\SDE.ZTE_DATA,就OK了——针对连接空间数据库的connection.sde文件也是如此。
gp服务分同步和异步,如果结果要通过result map service 绘制,只能选择异步;因为两个服务是分步执行的,必须gp服务先将结果生成到job目录,result map service再去读,然后绘出来发给前端 ;同步情况是不允许指定result map service的结果由gp服务直接返回给客户端的。
异步执行,会将scratchworkspace指定到\agsserver\jobs..../scratch目录下,生成的结果也在该目录;如果是同步执行,GP Service的执行结果会放到用户的临时目录下:
同步执行可以返回执行过程消息:
执行结果信息:
消息:
- esriJobMessageTypeInformative: 执行(contour): Model QIYA 0 100 C:\Users\AGSSER~1\AppData\Local\Temp\gp\contourgp_gpserver\j8df4f14d48b740bf9a3d2349ee593794\scratch\contourline.shp
- esriJobMessageTypeInformative: 开始时间: Mon Feb 06 14:40:39 2012
- esriJobMessageTypeInformative: 执行(IDW): Idw zhandian QIYA C:\Users\AGSSER~1\AppData\Local\Temp\gp\contourgp_gpserver\j8df4f14d48b740bf9a3d2349ee593794\scratch\idw.img .146536000000919 2 "VARIABLE 12" #
- esriJobMessageTypeInformative: 开始时间: Mon Feb 06 14:40:39 2012
- esriJobMessageTypeInformative: 成功 在 Mon Feb 06 14:40:40 2012 (经历的时间: 1.00 秒)
- esriJobMessageTypeInformative: 执行(Contour): Contour C:\Users\AGSSER~1\AppData\Local\Temp\gp\contourgp_gpserver\j8df4f14d48b740bf9a3d2349ee593794\scratch\idw.img C:\Users\AGSSER~1\AppData\Local\Temp\gp\contourgp_gpserver\j8df4f14d48b740bf9a3d2349ee593794\scratch\contour.shp 100 0 1
- esriJobMessageTypeInformative: 开始时间: Mon Feb 06 14:40:40 2012
- esriJobMessageTypeInformative: 成功 在 Mon Feb 06 14:40:40 2012 (经历的时间: 0.00 秒)
- esriJobMessageTypeInformative: 执行(Clip): Clip C:\Users\AGSSER~1\AppData\Local\Temp\gp\contourgp_gpserver\j8df4f14d48b740bf9a3d2349ee593794\scratch\contour.shp polygon C:\Users\AGSSER~1\AppData\Local\Temp\gp\contourgp_gpserver\j8df4f14d48b740bf9a3d2349ee593794\scratch\contourline.shp #
- esriJobMessageTypeInformative: 开始时间: Mon Feb 06 14:40:40 2012
- esriJobMessageTypeInformative: 正在读取要素...
- esriJobMessageTypeInformative: 正在裂化要素...
- esriJobMessageTypeInformative: 正在组合要素...
- esriJobMessageTypeInformative: 成功 在 Mon Feb 06 14:40:41 2012 (经历的时间: 1.00 秒)
- esriJobMessageTypeInformative: 成功 在 Mon Feb 06 14:40:41 2012 (经历的时间: 2.00 秒)