ArcGIS+Server++开发文档Word格式文档下载.docx

上传人:b****7 文档编号:21800879 上传时间:2023-02-01 格式:DOCX 页数:17 大小:70.80KB
下载 相关 举报
ArcGIS+Server++开发文档Word格式文档下载.docx_第1页
第1页 / 共17页
ArcGIS+Server++开发文档Word格式文档下载.docx_第2页
第2页 / 共17页
ArcGIS+Server++开发文档Word格式文档下载.docx_第3页
第3页 / 共17页
ArcGIS+Server++开发文档Word格式文档下载.docx_第4页
第4页 / 共17页
ArcGIS+Server++开发文档Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

ArcGIS+Server++开发文档Word格式文档下载.docx

《ArcGIS+Server++开发文档Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ArcGIS+Server++开发文档Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

ArcGIS+Server++开发文档Word格式文档下载.docx

点击确定,这样AS服务管理器的配置设置好了。

点击AddServerObject,开始新建服务对象,这些属性都很容易设置,除了一点,即“参数”中的“选择输出目录”,这个目录还必须选我们之前设置的文件夹,并且正确填写通过HTTP访问该文件夹的方式,即前面的http:

//localhost/xxx。

点击确定,这样一个AS的服务对象就新建好了。

如果不出意外,当我们点击ArcCatalog中的Preview时,就会出现图像了。

如果没有图像,我们先打开XXX文件夹,看看其中是否有图片存在,如果有,那就是服务成功,但是访问不成功,这个时候我们需要重启IIS,保证能够通过http:

//localhost/xxx的方式访问到XXX文件夹。

这是因为我们访问AS是通过WEB服务器进行的,而不是直接连接到服务。

ArcGISServer1

2006年5月26日byjbttm

ArcGISServer是用于开发基于网络的企业级服务器端程序的一套组件集,服务器端程序包括WebService、Web应用程序和EJB等。

使用AS开发的程序,其功能可以从普通的显示地图跨越到复杂的网络分析等,即它提供的功能比ArcIMS强大得多。

ESRI提供的AS包括两个部分,一是ArcGISServer,它是AS的服务器,AS能够运行全靠它;

另一个是用于客户端开发的程序ADF(ApplicationDeveloperFramework)开发集,它提供了一套可视化的WEB组件和模板,用于运行在WEB页面上(在9.2中,IMS的开发手段比以前有了很大的进步,和AS差不多)。

同AE一样,AS的核心组件也是AO,简单讲,它是运行在服务器端的AO组件集。

开发AS的手段有两种,一是使用,NET开发,另一种是使用JAVA开发。

AS的关键特征有:

1.标准的GIS框架,即它和ESRI其它的软件框架都是一样的,这样降低了开发难度。

2.降低了分布费用,由于AS是基于WEB的GIS程序,因此ADF的运行时是不需要license的,这也使得服务器端的功能可以免费被多用户使用。

3.WebControl,一系列可视化控件的提供,降低开发难度

4.Web程序模板

5.跨平台分布使用

6.多种开发语言

7.可以使用ArcGIS的多种高级功能,如3D分析,空间分析等

8.提供了大量的开发资源

ESRI提供了一份PDF文件《ArcGISServerAdministratorandDeveloperGuide》供AS管理员和开发者使用。

ArcGISServer学习2

2007年6月22日byjbttm

ArcGISServer是一个三层的分布式系统,它由多个组件组成。

AS的组件分为两部分,一是服务器端组件,如web服务器和GIS服务器;

另一端是客户端组件,即访问AS的程序,如web浏览器和ArcGIS的桌面端和AE产品。

第一层是客户端、第二层是web服务器,第三层就是GIS服务器。

我们先不谈桌面端的产品,先讨论服务器端的两个组件,即web服务器和GIS服务器。

WEB服务器是三层结构的第二层,它是用于构建web服务的计算机,需要安装web服务器软件,如IIS等。

WEB服务器用于接收客户端请求并运行web应用程序和服务。

最简单的WEB服务器可以只负责解析HTTP协议,但如果要干点别事情,如能够解析ASP、JSP等等WEB程序,就必须在WEB服务器上安装点别的组件。

如ArcIMS中,我们需要在WEB服务器上安装连接器就是这个道理。

同样,在AS中,我们开发的基于AS的WEB应用程序(ASP.NET网页)和web服务都在web服务器上,要运行起来还得装ADFRuntime才行,因为这些程序都使用到了AO,必须在WEB服务器上也安上必要的组件才行。

因此,为了能够通过WEB服务器访问AS,我们必须在WEB服务器上安装两个软件:

WEB服务器软件,如IIS,AS应用程序框架,即ADFRumtime。

GIS服务器负责管理和运行服务器对象。

它包括一个ServerObjectManager(SOM)、一个到多个ServerObjectContainers(SOC)和AS软件开发包。

ServerObjectManager是一个用于管理GIS资源,如地图或定位器的对象,我们在ArcCatalog中新建服务后添加的ServerObject就是这个对象。

它本身是一个AO组件,并且有权限来使用服务器端的其它AO组件。

SOM负责管理一群SOC,即一群进程,如负责将外部访问交给某个进程处理,平衡SOC的荷载。

它也是一切访问AS的程序接触到AS的总阀门。

SOC是一个进程,当我们访问一个ServerObject时系统会根据情况决定是否建立一个SOC,这个进程中可以容纳一个或多个ServerObject的访问例程。

我们可以在进程管理器中看到它。

而ServerObject,则是提供地图服务和定位器服务的对象,这个对象在编程中非常重要。

因此,一个外部访问是这样进行的:

访问连接到SOM,SOM将分配一个SOC给访问,这个SOC是一个进程通道,我们的任何访问和操作都在这个通道内完成,通过这个进程中的一个例程,我们获得了一个ServerObject,这个SO,就是我们需要获取的对象,我们可以通过IMapServer接口来对其进行编程或访问了。

因此,ArcGISServer,实际上就是一个管理服务器对象的对象服务器。

ArcGISServer学习3

2007年6月23日byjbttm

ArcGISServer是一个服务器端的AO组件集,我们对AS的编程操作,都意味着对远端服务器上对象的操作,这是一个很大的不同。

以使用AE开发成为为例,我们新建一个对象,使用的是new关键字,这是在本地机器上新建一个对象的操作,这个操作一直封装在一个进程中。

而AS的开发,意味着本地的一个对象,必须调用远端的一个对象来实现某种功能,本地的操作进程与远程的操作进程实际上是两个不同的进程,如何在两个进程之间进行通讯呢?

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

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

因此,AO的proxy对象都是安装在web服务器上的。

WEB程序或WEBService使用的组件是ServerAPI,这些API分为三种:

ServerAPI,.NETWebControl和JavaWebControl。

当一个WEB应用程序连接到GIS服务器的时候,WEB程序使用的ServerAPI将调用一个代理对象去访问远程服务器上的SOM对象,并通过SOM对象寻找到SOM管理的ServerObject对象。

它使用了分布式对象技术DOT。

这个过程是这样的:

IGISServerConnectionpGISServerConn=newGISServerConnectionClass();

pGISServerConn.Connect("

nbjbt"

);

//连接到GIS服务器

IServerObjectManagerSOM=pGISServerConn.ServerObjectManager;

//找到GISServer上的SOM

IServerContextpServerContext=SOM.CreateServerContext("

nbserver"

"

MapServer"

//通过SOM创建一个服务器对象的上下文

IServerObjectpSO=pServerContext.ServerObject;

 

//从上下文对象找到服务器对象

IMapServerpMapServer=(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("

ServerObject的池化和非池化模式

当我们访问一个服务器对象ServerObject的时候,这个对象是已经存在的呢?

还是在访问时新建的?

都有可能,这取决于我们如何选择。

如果我们选择共享池化模式,则在SOM启动的时候,SOM就建立了几个SO供外界访问,一个SO被A请求访问后,被释放回共享池中,还可以下次被B访问使用,因此,SO将可以被多个用户访问。

如果是非共享池模式,当一个请求访问时,SOM专门为它新建一个SO。

这样,在池化模式下,访问与SO的比例不是1:

1,它支持更多的用户;

而非池化模式就是1:

1的,它支持的用户比池化模式少。

SO放在什么地方,对,它就放在一个ServerContext中,即一个进程中。

一个访问连接到SO,是一个例程,这个例程是放置在一个进程中的。

而对于这个进程的特征,我们还需要进一步设置,即进程的孤立性。

如果ServerContext是高孤立的(highisolation),那么一个进程中只能放置一个例程,这样保障了安全性;

如果是低孤立的,四个访问连接的例程都可以放置在一个进程中,它的特点是节约资源。

至于如何设置,就有必要考虑我们的硬件设备了。

池化和非池化的设置对状态或非状态的应用程序也有影响,这些我们将在后面的blog中提到。

ArcGISServer学习4

2007年6月25日byjbttm

在前文中我们说道,ServerObject实际上就是我们建立的地图服务和定位服务,这个服务都是必须通过一个进程来被请求访问到的,那么,这个过程是怎么样的呢?

下面我们介绍在共享池模式下的连接过程:

1.客户端程序连接到SOM,要求访问一个SO;

2.SOM分配一个SOC给客户端程序的AOProxy对象,这个SOC是AS启动时建立的,默认最少为2个,最多为4个;

3.客户端程序通过调用远程AO对象的Proxy对象操作AO对象;

4.执行完操作后。

执行pSC.ReleaseContext,SOC返回共享池中,等待下一次请求访问。

如果是非共享池模式,这个过程不同在于:

1.SOM新建一个SOC给代理对象

2.执行执行pSC.ReleaseContext后,SOC被销毁而不是返回到共享池中。

有状态和无状态的GIS应用程序

我们知道,一个web程序在每个用户访问的时候,都会产生一个session来记录访客的信息,如果所有用户的访问与session的状态无关,则我们认为这个程序是无状态的,否则就是有状态。

例如mygoogle这些站点,每个人登录后的信息都是不同的,我们则认为这是一个有状态的程序。

对于AS的ServerObject而言,状态state也是非常重要的。

一个SO如果是有状态的,那么它的属性就能改变,否则,非状态的SO的属性是不能被修改的。

一个SO的状态如何暗示了它是否能够被跨session共享使用。

如果一个SO是无状态的,那么它就是共享的,否则就是独占式的。

SO是否使用状态与SO是否是共享池模式有密切个关系。

这是因为,一个池式的SO是不能被改变的,不能被用于有状态的程序中;

一个非池式的SO的属性是能够改变的,它能够用于有状态的程序中。

一个池式的ServerObject是默认为无状态使用的,这是因为这个SO可能会给多个用户访问,而且它用完后是会放回共享池中的,如果改变了它的状态,则意味着不同的访问者访问它时获得的信息不一致,这本身是一种非状态的行为。

而我们要求的是保证不同的人都是一样的结果的一种无状态模式,因此,保证本身具有“共享”特征的池式SO的无状态使用才是到达目的的方法。

因此,共享池模式的SO的无状态使用,是有效率满足访问的方式。

如果要做无模式的程序,共享池式的SO是首选。

如果是建立有模式的程序,那么使用非共享池式的SO是首选,由于这种情况下访问请求与SO数量是1:

1,这就使得一个人对SO的改变不会影响另一个人的使用。

下面是一个无状态的代码:

ServerConnectionpServerConn=newESRI.ArcGIS.Server.WebControls.ServerConnection("

pServerConn.Connect();

IServerObjectManagerpSOM=pServerConn.ServerObjectManager;

IServerContextpSC=pSOM.CreateServerContext("

IServerObjectpSO=pSC.ServerObject;

IMapServerpMapServer=(IMapServer)pSO;

IMapServerInfopMapServerInfo=pMapServer.GetServerInfo(pMapServer.DefaultMapName);

IMapDescriptionpMapDesc=pMapServerInfo.DefaultMapDescription;

IImageTypeit=(IImageType)pSC.CreateObject("

esriCarto.ImageType"

it.Format=esriImageFormat.esriImageJPG;

it.ReturnType=esriImageReturnType.esriImageReturnURL;

IImageDisplayidisp=(IImageDisplay)pSC.CreateObject("

esriCarto.ImageDisplay"

idisp.Height=400;

idisp.Width=400;

idisp.DeviceResolution=150;

IImageDescriptionpID=(IImageDescription)pSC.CreateObject("

esriCarto.ImageDescription"

pID.Display=idisp;

pID.Type=it;

IImageResultpImgResult=pMapServer.ExportMapImage(pMapDesc,pID);

this.Label1.Text=pImgResult.URL;

pSC.ReleaseContext();

代码执行完毕后,在Label1中将出现一张图片的地址,我们在AS服务器的输出目录看看,会发现已经生成了一张JPG的图片。

ArcGISServer学习5

2007年6月26日byjbttm

有状态和无状态的应用程序2

我们继续讨论web程序的状态问题。

其实写过诸如aspjsp的人都知道,类似session、cookie等东西在web页面程序中应用的非常广泛,因为这是我们让程序记住一个用户标志的方法,唯有使用这些对象,我们才能区分不同的用户。

事实上,有状态的web程序是极其常见的,许多我们根本没有意识到的“无状态”操作都依赖有状态的方法来实现,这种方法我们称为“浅状态程序”,例如下面这个例子,我们启动一个页面,然后点击一个“固定放大”按钮去放大地图,看起来似乎与状态无关,但是仔细想想,这种固定放大是依赖地图放大前一次的范围的,这意味着我们必须记录前一次的地图状态,这其实就是一种状态程序。

我们下面写这个代码:

页面启动:

privatevoidPage_Load(objectsender,System.EventArgse)

{

//在此处放置用户代码以初始化页面

if(!

Page.IsPostBack)

if(Session.IsNewSession)

ESRI.ArcGIS.Server.WebControls.ServerConnectionpServerConn=newESRI.ArcGIS.Server.WebControls.ServerConnection("

//将SOM保存到全局变量区

Application.Set("

som"

pSOM);

//将pMapDesc序列化为一个字符串,保存到一个session中

stringss=pSC.SaveObject(pMapDesc);

Session["

md"

]=ss;

//显示启动时默认地图

this.Image1.ImageUrl=this.CreateImage(pMapDesc,pSC);

//释放进程

}

下面是按下固定放大时候的代码:

privatevoidButton1_Click(objectsender,System.EventArgse)

IServerObjectManagerpSom=(IServerObjectManager)Application.Get("

IServerContextpSC=pSom.CreateServerContext("

IMapServerpMapServer=(IMapServer)pSC.ServerObject;

//从session中取出上一次地图的描述对象

stringsmd=(string)Session["

];

IMapDescriptionpMapDesc=(IMapDescription)pSC.LoadObject(smd);

IMapAreama=pMapDesc.MapArea;

IEnvelopepEnv=ma.Extent;

pEnv.Expand(0.9,0.9,true);

IMapExtentmx=(IMapExtent)ma;

mx.Extent=pEnv;

pMapDesc.MapArea=ma;

//改变地图

this.Ima

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1