ArcGIS Server 随笔2

在阅读前请先看看我从北京ESRI公司网站上摘抄下来的,关于创建AO对象的技术文段:

内容摘要
虽然说ArcGIS Server的开发技术当中最重要的技术是ArcOBjects。但是和在C/S模式下使用的ArcObjects还是会有一些差别,一个很重要的区别就是不能使用New方法来创建ArcObjects。
过程描述
1 web应用调用的是远程的Ao组件,这些Ao对象都运行在服务器ArcSoc.exe进程中,由服务器上下文(server context)统一来创建(IServerContext::CreateObject),并服务器上下文来统一的管理和操作,比如Ao对象之间的交互,释放等。
2 ArcGIS Server是一个可分布式部署的软件,GIS Server和Web应用可以部署在不同的机子上,而web应用的机子上只需要安装ADF运行包,只有ArcObjects的代理,不安装ArcObjects本身,因此web 应用没有能力来创建本地的ArcObjects对象,这也是不能使用New方式来创建ArcObjects的原因。

上文中明确说明了ArcGISServer开发创建AO对象必须通过特定接口去实现,如果你做Server应用开发请时时刻刻牢记,否则将出现我们意想不到的问题,当然前提就是你的项目最终需要分布式部署,Web应用和Gis Server部署到不同的计算机上。如果Server项目无需分布式部署,那下面说的问题可能就不会出现了。

由于公司硬件环境有限,我们通常把Server和ADF安装在自己的计算机上,为了是便于开发和测试。也正是这样的客观环境,大家很容易忽略创建AO的问题,如果你在Web应用项目中写入创建Ao折线对象:  ESRI.ArcGIS.Geometry.IPolyline pline = new ESRI.ArcGIS.Geometry.PolylineClass();  是可以成功运行的。调用AO并实现功能一切都是那么自然和顺利。等到移交到客户的分布式部署环境中,这样的代码将引发意想不到的异常,原因就是上面说的第二点,相当的重要:GIS Server和Web应用可以部署在不同的机子上,而web应用的机子上只需要安装ADF运行包。只有ArcObjects的代理 ... 。切记!!

小结:
作为Server开发人员,光了解AO或Web应用开发都是不够的,必须将两者在一定的规则下进行结合,才能充分发挥Server强大的功能。因为Ao是基于COM写的,COM是不能直接在NET的CLR中运行的,必须通过代理来实现NET的调用,而ADF是纯NET编写的,直接在CLR中调用。在编程过程中COM的AO和ADF的类经常会混淆不好区分,怎么区分那些是COM实现的AO组件呢?ESRI.ArcGIS.Geometry.IPolyline pline = new ESRI.ArcGIS.Geometry.PolylineClass(); ,写过VB的朋友一定有映像,实例化折线的类是Polyline,而在NET中则变成了PolylineClass,这其实是NET自动生成的COM代理类,我想除了命名空间外,这其实也是一个辨别是否是AO的一个办法吧,以后再遇到....Class的代码时一定要注意了:)

原文地址:https://www.cnblogs.com/gis9/p/802383.html