Jerome_lau

GIS is changing the World!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ArcGIS Server 开发笔记(连载)

Posted on 2009-02-13 22:38  jerome  阅读(285)  评论(0)    收藏  举报
  作为第一篇,这里引用一些前辈的文章做关于SERVER的介绍。

ArcGIS Server产品包括两个部分,一是GIS Server,它是一个提供GIS服务的服务器软件产品,包括一系列核心AO库和一个管理这些AO组件的可缩放的运行环境;另一个是ADF,即应用程序开发框架,它有JAVA和.NET两种开发组件集,它是用来开发和部署基于GIS Server的web应用程序的产品,包括组件对象、web控件、web模板和开发帮助,它还有一个web程序的runtime,专门用于发布和部署使用ADF开发的web程序,如ASP.NET等。

GIS Server是一套GIS服务器组件,专门用于管理和发布地图服务和定位服务,安装在GIS服务器上;ADF是供开发人员使用的开发组件集,安装在开发人员的机器上,这些程序包括WEB应用程序、WEB服务和桌面端程序,都可以使用ADF;ADF Runtime是专门用于部署开发人员开发的GIS web程序和GIS WEB Service的工具,安装在WEB服务器上。GIS服务器、WEB服务器和开发人员的电脑可以是同一台机器,也可以分开安装。

ArcGIS Server是一个服务器端的AO组件集,我们对AS的编程操作,都意味着对远端服务器上对象的操作,这是一个很大的不同。以使用AE开发成为为例,我们新建一个对象,使用的是new关键字,这是在本地机器上新建一个对象的操作,这个操作一直封装在一个进程中。而AS的开发,意味着本地的一个对象,必须调用远端的一个对象来实现某种功能,本地的操作进程与远程的操作进程实际上是两个不同的进程,如何在两个进程之间进行通讯呢?

AS使用了分布式对象技术DOT来处理这个问题,ADF提供了一系列所谓的ArcObjects proxy对象,一个proxy对象就是一个远端对象在本地的引用,它的接口和方法与proxy对象的远端对象完全一致,这样,我们对proxy对象的操作,就会直接影响到它代理的远端对象。

我们说过,AS是一个三层模型,其中通过浏览器访问的WEB程序和WEB服务都是放在第二层,即WEB服务器上的,为了让WEB服务器上的程序能够通过操作AO组件来与GIS服务器上的AO组件进行交互,我们需要在WEB服务器上安装ADF,如果是发布的话,安装ADF Runtime就行了。因此,AO的proxy对象都是安装在web服务器上的。

 

当一个WEB应用程序连接到GIS服务器的时候,WEB程序使用的Server API将调用一个代理对象去访问远程服务器上的SOM对象,并通过SOM对象寻找到SOM管理的Server Object对象。它使用了分布式对象技术DOT。这个过程是这样的:

IGISServerConnection pGISServerConn=new GISServerConnectionClass();
pGISServerConn.Connect("nbjbt");//连接到GIS服务器
IServerObjectManager SOM=pGISServerConn.ServerObjectManager;//找到GIS Server上的SOM
IServerContext pServerContext=SOM.CreateServerContext("nbserver","MapServer");//通过SOM创建一个服务器对象的上下文
IServerObject pSO=pServerContext.ServerObject; //从上下文对象找到服务器对象
IMapServer pMapServer=(IMapServer)(pSO);//使用IMapServer接口来访问服务器对象
。。。。。。
pServerContext.ReleaseContext();//释放服务器对象的上下文,即关闭该进程

ServerContext本质上是一个GIS服务器上的进程,它也是我们服务器端编程的起点。因此,我们是通过CreateServerContext命令在服务器端上创建的,而不是使用NEW关键字在本机上创建。我们是通过这个进程在访问服务器对象nbserver。我们的工作也是在这个进程中完成的。

 既然是在一个进程中编程,那么,在这个进程中新建一个对象使用的关键字就不是NEW了,而是下面的方式:
新建对象 pSC.CreateObject("esriGeometry.IPoint")
将一个对象放入一个进程 pSC.LoadObject(pPt)
将一个对象放在进程的字典中pSC.SetObject("a",pPt)
将对象从进程字典取出pNewPt=pSC.GetObject("a")

WEB程序或WEB Service使用的组件是Server API,这些API分为三种:Server API,.NET WebControl和Java WebControl。