关于arcGIS server9.2的开发

来源:互联网 发布:layout软件下载 编辑:程序博客网 时间:2024/04/30 01:57

关于 ArcGIS server

〔casterking@163.com〕

如果你初次接触这个东西,那么你肯定是要晕一阵子了。
现在我把我曾经晕的地方放到这里。如果你恰巧检索到我这个东西,你就可以不晕啦~

1 "未将对象引用设置到对象的实例" or "Object reference not set to an instance "
 安装本来一点问题没有,在vs2005中直接做也没问题,可是在浏览器里弄常常死掉,出现这个错误。更为fz的是.net安装后自带的manager也会提示这个错误,以至于我不得不装个for java的,才能控制service。
 如果你也遇到这个问题,那么请检查你的framework版本,很有可能你同时有1.1 和 2.0。而iis并没有将2.0弄成默认的,以至于1.1对付不了server9.2提出的要求。
 解决其实也不难。在DOS下 C:/WINDOWS/Microsoft.NET/Framework/v2.0.50215目录中运行aspnet_regiis.exe -i
 检查iis/网站/属性/asp.net 中 asp.net version是不是指向2.0,同样iis/网站/默认网站/属性/asp.net。

2 安装完成之后arcgisSOC arcgis SOM 的问题
 esri用这个东西来保证安全,的确很好,但给用户造成的麻烦和啰唆也不少。安装server完毕要post installation,他会给系统几个组和用户,实际上基本使用时只要administrator有完全权限就足够了,因此你要把你的用户名塞进agsadmin和agsusers里。
 更为重要的,此时系统的服务里会有个arcGIS server object manager,你要修改他的属性中登录部分的账户。尽管不少安装说明都提了,我还是忽略了很多次,你就不要在忽略了。修改成你的用户名和密码。设成本地系统账户也可。

3 初次使用时,还容易忽略一个问题 Identity
 arcgis非要使用这个东西,才能正常接收service。但刚开始很容易想不起来,起码我用过多次后,重建个project仍然会忘记Identity。这个不细说了在项目上右键,再add arcgis identity...

4 using ESRI.ArcGIS.ADF...
 这个东西的前提是你这个项目已经在web.config里注册了他们。你可以查看这个文件assemblies里。
 我一开始以为是要手写,so就把我用的的都接在后面了,并且使用同样的publickeytoken 和 version。但其实只需要在项目上右键,add arcgis reference 选择你要的就行了。
 另外你如果安装了service sp1,version的版本号就会变化,这会引起什么问题呢?就是假如把这个项目放在另一个没有安装升级包的server机器里,他就会找不到这个version的组件,需要把version改过来,这一点bt。

5 添加GeoprocessingTask
 这个挺麻烦的,主要是你要弄个合适的model并把它成功的发布成service。
 这里面我碰到的问题是如何在运行时选择我要操作的东西。通常geoprocessing是要你给定一些参数,才能在浏览器里乖乖的运行。为了选择我要的需要在input的东西前再添加一个select data。好在这个工具toolbox里提供了,把他拖进来设置他的两个参数,把ouput连到需要原来需要input的地方。
 还有个问题就是如果你要修改或新建个featuresclass在mdb里,恐怕很难成功。因为当你的service运行过程中mdb是被锁死的。任何修改都会被拒绝,希望能解决这个问题的人通知我一下啊~ 我目前的解决方式是把需要修改的东西做成shp或dbf放在库外面,这样就可随便改动了,但我可不想这么做。

6 service过多内存不足 以及 图层重排
 service在这方面太狠了,每建一个服务,运行起来就会多一个arcSOC用掉50m左右内存,我的project需要的地图大概少说也要30多张,这要是都建成服务,什么机器也都要跟我罢工了。
 解决办法,在一个mxd里把你需要的图层加进去,安排好图层的重叠位置,保证只要让其可见不可见就能表达出你所要的全部专题。把他发布成一个服务。之后在编程过程中定义每个图层的visible。
 当按此方法做出来之后会有新的问题,就是TOC里会把你所有的图层都列出来,这是很恐怖的。我可不想用户看到这么多图层,为了解决这个问题,需要设定TOC的Pagesize,它可以让你每页显示固定数量的图层数,也就是你这个专题图需要的图层数。为了保证可视的这些图层都在TOC里摆着,你需要调整service中,每个图层的位置。
 新的问题又出来了,你在这个图中改了图层的位置还会影响到别的图。我的解决方法是,在移动之前记录每个层的实际位置,在完成移动并刷新TOC之后,马上把各图层归位。也就是说此时浏览器上是按我要求显示的,而service也是维持了原貌的。
 问题总是解决一个又有一个新的出来。目前仍没有解决的是,当按照前面这么做了以后,假如taskresults里有东西,这个页面刷新就出错。奇怪的很,说gisreource传递类型错误,希望有明白人来告诉我怎么回事。我的解决办法只是在进行图层重排前先判断taskresults里是否有东西,有就不操作。
 <源代码>

7 QuerySelectTask 在网上可以搜到两个扩展
 一个是hightlight查询的结果,另一个是zooming to 查询的结果。
 这两个都是很有用的东西强烈建议加进你的系统中。

<源代码>

 8 补充Geoprocessing Service
 本来以前做的Geoprocessing发布的很正常,运行也算好,但今天发布一个新的就不行了,总是看不到toolbox里的model,甚至吧正在正常运行的toolbox拿来都不能正确的发布,应用中的GeoprocessingTask也看不到Model,最后在gisserver 的log里发现了个东西 "ConfigurationFactoryOP creation failed."
继续google出了http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.articleShow&d=34285
于是乎重新修改了服务中SOM的登录用户为ArcSOM,之后再发布正常
又出现了新的问题,这个模型用到Weighted Overlay,但是把他的变量用参数的方式发布的话就不能用了,只好用最原始的time plus time plus.....