系统基于FlexViewer2.3及ArcGIS Server 10开发,同样的地图文档及数据在dot net版(10.0)及java版(10.02)的ArcGIS Server上发布为Map Service。系统有一个统计地图数据的widget,需要用到Query及QueryTask组件,query.where=" "。
当QueryTask的url指向dot net版Server发布的地图服务中的图层时,功能正常;当其url指向java版Server发布的地图服务中的图层时,弹出报错窗口,报”#2032流错误“,并给出出错的url。
首先在网上搜索 解决办法,一般给出的解答都是在9.3及更早版本的Server中,需要设置QueryTask.useAMF=false;在10及以后版本的Server中,则不需作此设置,采用默认的AMF格式传输数据即可。
但本系统就是采用的10版本的Server,而且若设置QueryTask.useAMF=false,错误依然存在。
将报错时给出的url复制到浏览器中查看,页面内会提示类似”Invalid parameter“的信息;将url中的ip及 端口改为dot net版server所在服务器,再在浏览器中查看,则会弹出下载提示,提示保存文件,看来得到了查询结果从服务器返回。
怀疑是java版server中tomcat编码的问题,但在search widget中同样用到了Query及QueryTask组件,不论是访问dot net版还是java版Server上的地图服务,功能正常。区别在于search widget中Query的where子句不是等于空格!于是将报错的url中的where参数的值改为类似proj_no like *的查询条件,再在浏览器中查看,也提示下载和保存文件!!!说明报错的原因很可能是java版server,Query.where=" "引起的。
设置QueryTask的url为java版server发布的地图服务的图层;因为在统计widget中的Query需要返回所有数据,于是设置query.where="1=1",编译并运行程序,功能正常!(若设置为query.where="proj_no like *"或query.where="proj_no like %*%"之类,虽不保错,但会返回零条数据)