程柱,高飞,胡小华
(1.合肥工业大学土木与水利工程学院,安徽合肥 230009; 2.合肥市国土资源局信息中心,安徽合肥 230001)
基于ArcGIS Server的池化与非池化服务研究
程柱1∗,高飞1,胡小华2
(1.合肥工业大学土木与水利工程学院,安徽合肥 230009; 2.合肥市国土资源局信息中心,安徽合肥 230001)
介绍了ArcGIS Server的基本知识和体系结构,分析了ArcGIS Server中服务器对象池化与非池化服务的特点,并通过实例比较两种服务之间的不同点以及各自优点和缺点,指出了它们各自的应用场合,为开发WebGIS系统提供参考。
ArcGIS Server;WebGIS;池化;非池化
随着各行业各部门对GIS应用的增加以及GIS技术的快速发展并逐步成熟完善,利用Internet/Intranet技术在互联网上发布地理信息,以方便用户浏览、查询以及获取空间信息和应用,已成为传统GIS向WebGIS发展的必然趋势,而ArcGIS Server的出现,为构建高性能WebGIS提供了新的解决方案。本文在简要介绍ArcGIS Server的基础上,对ArcGIS Server开发中服务器对象的池化与非池化服务进行探讨。
ArcGIS Server是ESRI(Environmental Systems Research Institute)一套后台基于ArcObjects(用于构造ArcGIS系列平台的一个组件对象库)搭建的强大的B/ S开发工具,同时也是一个用于构建集中管理、支持多用户的企业级GIS应用的平台,它不仅可以提供在线地图发布和在线地图浏览的功能,而且可以提供在线的分析和地图编辑功能。
ArcGIS Server由GIS服务器和.NET或Java的应用开发框架(ADF)两部分组成。GIS服务器是ArcObjects对象的宿主,主要由一个SOM(服务器对象管理器)和若干个SOC(服务器对象容器)所组成,主要管理和运行服务器对象(Server Objects)。应用开发框架则使用ArcObjeets对象来构建和部署Web应用和桌面应用,应用开发框架包括一组Web控件、Web应用模板,以及开发帮助和实例代码等。
ArcGIS Server中服务器对象是空间数据的载体,创建和销毁服务器对象需要较大的开销,并且服务器对象可创建最大数目也是有限的。所以,为了优化系统运行时的性能,必须对服务器对象的生命周期进行有效管理,并且对于不同应用场景选择相应管理方式,为了解决该问题,可以通过设置服务器对象的池化与非池化服务管理来解决。
3.1 池化服务
在ArcGIS Server开发中选取池化服务时,服务器对象是在服务器运行时预先创建了指定数目的,并且只在用户请求服务器对象时,优先使用己创建的服务器对象,如果没有空闲的服务器对象才会创建新的服务器对象返回给用户进程进行相应的操作,并且当用户操作结束后立即将服务器对象释放回到服务器对象池中等待下一个用户会话。示意图如图1所示。
图1 池化方式处理流程图
(1)池化服务分类
池化服务可以分为High Isolation和Low Isolation两种。High Isolation是指服务的每个实例(instance)都会独占一个arcsoc.exe进程,Low Isolation则是指一个进程内可保有多个(默认是8个,最多可达256个)实例。Low Isolation的好处是可以启动相对少的arcsoc.exe来维持同样数量的实例,节约服务器的内存资源;但如果一个arcsoc.exe崩溃,那么里面的所有实例都会被销毁,即使用户正在使用它们。High Isolation的优缺点则与之相反。一般来说,对于池化服务使用High Isolation设置。
(2)池化服务特点
池化服务具有以下3个主要特性:
首先池化服务器对象是预先创建的服务器对象,它在用户请求服务器对象前就已预先获取了服务器对象中包含的空间信息,并在内存中创建并维持了指定数目服务器对象。这有效地降低了每次用户请求时重复获取空间信息的时间与创建服务器对象的系统开销。
其次池化服务器对象是可供多个用户共享。由于池化服务器对象仅仅在用户请求时返回给用户,当用户的一次操作结束后立即释放服务器对象到服务器对象池中,所以池化服务器对象允许多个应用程序进程共享同一个服务器对象,即多个用户可以在其操作进程中使用同一个服务器对象,从而达到资源的最大化利用,而且由于在用户获取服务器对象前已经创建了服务器对象,所以减少了重复创建和销毁服务器对象的开销,加速了系统响应时间。
最后池化服务器对象是无状态的。由于用户每次操作都需要重新获取服务器对象,并且在操作后释放服务器对象以供其他用户访问,所以池化服务器对象一定是无状态的对象。每次调用的服务器对象都是初始化时状态,其本身无法自动保存其状态。并且池化服务器对象只读模式,这意味着不能修改服务器对象及其相关对象,但是一般在系统中都需要有状态的服务器对象,即需要知道用户上次操作的状态。比如地图的按比例缩放操作,只有知道了用户前一状态的视图范围与缩放比例才能返回给用户放大后的结构,如果不保存服务器的状态将会导致每次用户调用按比例缩放功能都会返回初始化时地图状态按照缩放比例缩放后的范围,所以当使用无状态的服务器对象时,必须在程序中保存服务器对象状态。
3.2 非池化服务
非池化服务是在用户第一次请求服务器对象时创建,并当用户会话结束后才会释放服务器对象,所以一个非池化服务器对象对应一个用户进程,如图2所示。
图2 非池化方式处理流程图
非池化服务器对象在用户会话开始时创建,在整个用户进程中都是使用着同一个服务器对象,直到用户会话结束后才会销毁该服务器对象。一个服务器对象对应着一个用户进程,所以非池化服务器对象是有状态的,有状态服务器对象是可读写的对象,意味着应用可以对服务器对象及其相关对象作改动。如修改图层的可见性,修改图层要素集中的内容等。但是在非池化管理状态下一个服务器对象只能服务于一个用户,而且服务器对象的创建都是在每次用户请求时才创建,如果全部使用非池化的服务器对象将会使得服务器在大并发访问时产生严重的性能问题,甚至瘫痪,所以当不需要修改服务器对象中要素集内容的情况下尽量使用池化服务器对象来改善系统性能。
4.1 发布地图服务并创建站点
在ArcCatalog中发布一个地图服务,这里服务名称为hefeitd。该地图服务包括两个图层,一个是合肥地区的影像数据图层,另一个是合肥地区道路交通网的矢量数据图层。然后在Visual Studio 2005中创建一个站点,向Default.aspx页面中添加ArcGIS Server ADF的Map控件和MapResourceManager控件,并且使用hefeitd服务。向页面中添加一个asp.net的web服务器控件Button,标题改为delete layer。
4.2 使用C#编写删除图层功能
向delete layer按钮的Click事件添加处理方法。首先连接ArcGIS Server,然后创建servercontext,获取IMap接口,删除一个图层,释放servercontext。关键代码如下:
运行程序,可以在 IE页面中浏览,效果如图 3 (a),同时在ArcCatalog中预览hefeitd服务,该地图服务与IE页面中看到的一样,包括合肥地区的影像数据图层和道路交通网矢量数据图层。
图3 IE浏览器中显示效果图
4.3 两种服务的比较
当选择的是池化服务时,点击delete layer按钮后,道路交通网的矢量图层被删除,只留下影像图层,如图3(b),同时在ArcCatalog中预览,效果如图4(a),可以发现和浏览器中的效果一样,也是只有影像图层,没有矢量的图层。这是池化服务的效果,因为在浏览器中删除的图层时使用的服务器对象并没有被销毁,然后被ArcCatalog使用,这样在IE浏览器中的操作就影响了其他用户的地图状态。
图4 ArcCatalog显示效果图
在ArcCatalog中把hefeitd服务修改为非池化,点击delete layer按钮后,在IE中浏览页面,发现道路交通网的矢量图层被删除,只留下影像图层,如图3(b),同时在ArcCatalog中预览hefeitd服务,可以发现和IE浏览器中的效果不一样,影像图层和矢量图层都存在。这是非池化服务的效果,如图4(b)。ArcCatalog和浏览器查看地图时使用的并不是同一个服务器对象,所以彼此之间没有产生干扰。
在ArcGIS Server开发过程中,服务器对象选择池化或非池化服务方式各有优势,池化的服务可以在多个应用程序之间会话中共享,当应用程序会话返回一个池化服务实例到服务器,就可以被其他应用程序的会话使用,故池化服务适用于无状态操作,而非池化服务可以维护状态,尤其是在数据编辑的功能实现时使用。在实际使用过程中应根据具体情况选择合适的服务类型,以便WebGIS系统发挥最佳的性能。
[1]陈非.ArcGIS Server 9.2的概念和新特性[R].北京:ESRI中国(北京)有限公司,2006
[2]沈百玲.AreGIS Server简介[R].北京:ESRI中国(北京)有限公司,2004
[3]吴功和,丛明日.基于ArcGIS Server分布式GIS的应用[J].测绘科学技术学报,2006.23(1):52~55
[4]刘光,唐大仕.Web GIS开发——ArcGIS Server与.NET [M].北京:清华大学出版社,2009
[5]汪昊琦.基于ArcGIS的企业级GIS系统开发与应用[D].上海:华东师范大学,2007.6
[6]ESRI.ArcGIS Server Developers Guide[R].2006
[7]康玲,傅俊锋,王怀清等.基于ArcGIS Server的WebGIS应用系统开发[J].水利能源科学,2007.25(1):26~29
Research of Pooled and None-Pooled Service Based on ArcGIS Server
Cheng Zhu1,Gao Fei1,Hu XiaoHua2
(1.School of Civil Engineering,HeFei University of Technology,Hefei 230009,China;2.The Information Center of the Land And Resource Department of Hefei,Hefei 230001,China)
This paper introduced the basic knowledge and the architecture of ArcGIS Server,then analyzed characteristics of pooled and none-pooled service of ArcGIS Server’s server object,meanwhile,compared the differences,advantages and disadvantages of these two kinds of service by example,pointing out their applications as well as providing references for developing WebGIS.
ArcGIS Server;WebGIS;pooled;none-pooled
1672-8262(2010)04-70-04
P208
B
2009—11—12
程柱(1984—),男,在读硕士研究生,研究方向为地理信息系统与数字测绘技术。