程柱,高飛,胡小華
(1.合肥工業(yè)大學(xué)土木與水利工程學(xué)院,安徽合肥 230009; 2.合肥市國(guó)土資源局信息中心,安徽合肥 230001)
基于ArcGIS Server的池化與非池化服務(wù)研究
程柱1?,高飛1,胡小華2
(1.合肥工業(yè)大學(xué)土木與水利工程學(xué)院,安徽合肥 230009; 2.合肥市國(guó)土資源局信息中心,安徽合肥 230001)
介紹了ArcGIS Server的基本知識(shí)和體系結(jié)構(gòu),分析了ArcGIS Server中服務(wù)器對(duì)象池化與非池化服務(wù)的特點(diǎn),并通過(guò)實(shí)例比較兩種服務(wù)之間的不同點(diǎn)以及各自優(yōu)點(diǎn)和缺點(diǎn),指出了它們各自的應(yīng)用場(chǎng)合,為開(kāi)發(fā)WebGIS系統(tǒng)提供參考。
ArcGIS Server;WebGIS;池化;非池化
隨著各行業(yè)各部門對(duì)GIS應(yīng)用的增加以及GIS技術(shù)的快速發(fā)展并逐步成熟完善,利用Internet/Intranet技術(shù)在互聯(lián)網(wǎng)上發(fā)布地理信息,以方便用戶瀏覽、查詢以及獲取空間信息和應(yīng)用,已成為傳統(tǒng)GIS向WebGIS發(fā)展的必然趨勢(shì),而ArcGIS Server的出現(xiàn),為構(gòu)建高性能WebGIS提供了新的解決方案。本文在簡(jiǎn)要介紹ArcGIS Server的基礎(chǔ)上,對(duì)ArcGIS Server開(kāi)發(fā)中服務(wù)器對(duì)象的池化與非池化服務(wù)進(jìn)行探討。
ArcGIS Server是ESRI(Environmental Systems Research Institute)一套后臺(tái)基于ArcObjects(用于構(gòu)造ArcGIS系列平臺(tái)的一個(gè)組件對(duì)象庫(kù))搭建的強(qiáng)大的B/ S開(kāi)發(fā)工具,同時(shí)也是一個(gè)用于構(gòu)建集中管理、支持多用戶的企業(yè)級(jí)GIS應(yīng)用的平臺(tái),它不僅可以提供在線地圖發(fā)布和在線地圖瀏覽的功能,而且可以提供在線的分析和地圖編輯功能。
ArcGIS Server由GIS服務(wù)器和.NET或Java的應(yīng)用開(kāi)發(fā)框架(ADF)兩部分組成。GIS服務(wù)器是ArcObjects對(duì)象的宿主,主要由一個(gè)SOM(服務(wù)器對(duì)象管理器)和若干個(gè)SOC(服務(wù)器對(duì)象容器)所組成,主要管理和運(yùn)行服務(wù)器對(duì)象(Server Objects)。應(yīng)用開(kāi)發(fā)框架則使用ArcObjeets對(duì)象來(lái)構(gòu)建和部署Web應(yīng)用和桌面應(yīng)用,應(yīng)用開(kāi)發(fā)框架包括一組Web控件、Web應(yīng)用模板,以及開(kāi)發(fā)幫助和實(shí)例代碼等。
ArcGIS Server中服務(wù)器對(duì)象是空間數(shù)據(jù)的載體,創(chuàng)建和銷毀服務(wù)器對(duì)象需要較大的開(kāi)銷,并且服務(wù)器對(duì)象可創(chuàng)建最大數(shù)目也是有限的。所以,為了優(yōu)化系統(tǒng)運(yùn)行時(shí)的性能,必須對(duì)服務(wù)器對(duì)象的生命周期進(jìn)行有效管理,并且對(duì)于不同應(yīng)用場(chǎng)景選擇相應(yīng)管理方式,為了解決該問(wèn)題,可以通過(guò)設(shè)置服務(wù)器對(duì)象的池化與非池化服務(wù)管理來(lái)解決。
3.1 池化服務(wù)
在ArcGIS Server開(kāi)發(fā)中選取池化服務(wù)時(shí),服務(wù)器對(duì)象是在服務(wù)器運(yùn)行時(shí)預(yù)先創(chuàng)建了指定數(shù)目的,并且只在用戶請(qǐng)求服務(wù)器對(duì)象時(shí),優(yōu)先使用己創(chuàng)建的服務(wù)器對(duì)象,如果沒(méi)有空閑的服務(wù)器對(duì)象才會(huì)創(chuàng)建新的服務(wù)器對(duì)象返回給用戶進(jìn)程進(jìn)行相應(yīng)的操作,并且當(dāng)用戶操作結(jié)束后立即將服務(wù)器對(duì)象釋放回到服務(wù)器對(duì)象池中等待下一個(gè)用戶會(huì)話。示意圖如圖1所示。
圖1 池化方式處理流程圖
(1)池化服務(wù)分類
池化服務(wù)可以分為High Isolation和Low Isolation兩種。High Isolation是指服務(wù)的每個(gè)實(shí)例(instance)都會(huì)獨(dú)占一個(gè)arcsoc.exe進(jìn)程,Low Isolation則是指一個(gè)進(jìn)程內(nèi)可保有多個(gè)(默認(rèn)是8個(gè),最多可達(dá)256個(gè))實(shí)例。Low Isolation的好處是可以啟動(dòng)相對(duì)少的arcsoc.exe來(lái)維持同樣數(shù)量的實(shí)例,節(jié)約服務(wù)器的內(nèi)存資源;但如果一個(gè)arcsoc.exe崩潰,那么里面的所有實(shí)例都會(huì)被銷毀,即使用戶正在使用它們。High Isolation的優(yōu)缺點(diǎn)則與之相反。一般來(lái)說(shuō),對(duì)于池化服務(wù)使用High Isolation設(shè)置。
(2)池化服務(wù)特點(diǎn)
池化服務(wù)具有以下3個(gè)主要特性:
首先池化服務(wù)器對(duì)象是預(yù)先創(chuàng)建的服務(wù)器對(duì)象,它在用戶請(qǐng)求服務(wù)器對(duì)象前就已預(yù)先獲取了服務(wù)器對(duì)象中包含的空間信息,并在內(nèi)存中創(chuàng)建并維持了指定數(shù)目服務(wù)器對(duì)象。這有效地降低了每次用戶請(qǐng)求時(shí)重復(fù)獲取空間信息的時(shí)間與創(chuàng)建服務(wù)器對(duì)象的系統(tǒng)開(kāi)銷。
其次池化服務(wù)器對(duì)象是可供多個(gè)用戶共享。由于池化服務(wù)器對(duì)象僅僅在用戶請(qǐng)求時(shí)返回給用戶,當(dāng)用戶的一次操作結(jié)束后立即釋放服務(wù)器對(duì)象到服務(wù)器對(duì)象池中,所以池化服務(wù)器對(duì)象允許多個(gè)應(yīng)用程序進(jìn)程共享同一個(gè)服務(wù)器對(duì)象,即多個(gè)用戶可以在其操作進(jìn)程中使用同一個(gè)服務(wù)器對(duì)象,從而達(dá)到資源的最大化利用,而且由于在用戶獲取服務(wù)器對(duì)象前已經(jīng)創(chuàng)建了服務(wù)器對(duì)象,所以減少了重復(fù)創(chuàng)建和銷毀服務(wù)器對(duì)象的開(kāi)銷,加速了系統(tǒng)響應(yīng)時(shí)間。
最后池化服務(wù)器對(duì)象是無(wú)狀態(tài)的。由于用戶每次操作都需要重新獲取服務(wù)器對(duì)象,并且在操作后釋放服務(wù)器對(duì)象以供其他用戶訪問(wèn),所以池化服務(wù)器對(duì)象一定是無(wú)狀態(tài)的對(duì)象。每次調(diào)用的服務(wù)器對(duì)象都是初始化時(shí)狀態(tài),其本身無(wú)法自動(dòng)保存其狀態(tài)。并且池化服務(wù)器對(duì)象只讀模式,這意味著不能修改服務(wù)器對(duì)象及其相關(guān)對(duì)象,但是一般在系統(tǒng)中都需要有狀態(tài)的服務(wù)器對(duì)象,即需要知道用戶上次操作的狀態(tài)。比如地圖的按比例縮放操作,只有知道了用戶前一狀態(tài)的視圖范圍與縮放比例才能返回給用戶放大后的結(jié)構(gòu),如果不保存服務(wù)器的狀態(tài)將會(huì)導(dǎo)致每次用戶調(diào)用按比例縮放功能都會(huì)返回初始化時(shí)地圖狀態(tài)按照縮放比例縮放后的范圍,所以當(dāng)使用無(wú)狀態(tài)的服務(wù)器對(duì)象時(shí),必須在程序中保存服務(wù)器對(duì)象狀態(tài)。
3.2 非池化服務(wù)
非池化服務(wù)是在用戶第一次請(qǐng)求服務(wù)器對(duì)象時(shí)創(chuàng)建,并當(dāng)用戶會(huì)話結(jié)束后才會(huì)釋放服務(wù)器對(duì)象,所以一個(gè)非池化服務(wù)器對(duì)象對(duì)應(yīng)一個(gè)用戶進(jìn)程,如圖2所示。
圖2 非池化方式處理流程圖
非池化服務(wù)器對(duì)象在用戶會(huì)話開(kāi)始時(shí)創(chuàng)建,在整個(gè)用戶進(jìn)程中都是使用著同一個(gè)服務(wù)器對(duì)象,直到用戶會(huì)話結(jié)束后才會(huì)銷毀該服務(wù)器對(duì)象。一個(gè)服務(wù)器對(duì)象對(duì)應(yīng)著一個(gè)用戶進(jìn)程,所以非池化服務(wù)器對(duì)象是有狀態(tài)的,有狀態(tài)服務(wù)器對(duì)象是可讀寫的對(duì)象,意味著應(yīng)用可以對(duì)服務(wù)器對(duì)象及其相關(guān)對(duì)象作改動(dòng)。如修改圖層的可見(jiàn)性,修改圖層要素集中的內(nèi)容等。但是在非池化管理狀態(tài)下一個(gè)服務(wù)器對(duì)象只能服務(wù)于一個(gè)用戶,而且服務(wù)器對(duì)象的創(chuàng)建都是在每次用戶請(qǐng)求時(shí)才創(chuàng)建,如果全部使用非池化的服務(wù)器對(duì)象將會(huì)使得服務(wù)器在大并發(fā)訪問(wèn)時(shí)產(chǎn)生嚴(yán)重的性能問(wèn)題,甚至癱瘓,所以當(dāng)不需要修改服務(wù)器對(duì)象中要素集內(nèi)容的情況下盡量使用池化服務(wù)器對(duì)象來(lái)改善系統(tǒng)性能。
4.1 發(fā)布地圖服務(wù)并創(chuàng)建站點(diǎn)
在ArcCatalog中發(fā)布一個(gè)地圖服務(wù),這里服務(wù)名稱為hefeitd。該地圖服務(wù)包括兩個(gè)圖層,一個(gè)是合肥地區(qū)的影像數(shù)據(jù)圖層,另一個(gè)是合肥地區(qū)道路交通網(wǎng)的矢量數(shù)據(jù)圖層。然后在Visual Studio 2005中創(chuàng)建一個(gè)站點(diǎn),向Default.aspx頁(yè)面中添加ArcGIS Server ADF的Map控件和MapResourceManager控件,并且使用hefeitd服務(wù)。向頁(yè)面中添加一個(gè)asp.net的web服務(wù)器控件Button,標(biāo)題改為delete layer。
4.2 使用C#編寫刪除圖層功能
向delete layer按鈕的Click事件添加處理方法。首先連接ArcGIS Server,然后創(chuàng)建servercontext,獲取IMap接口,刪除一個(gè)圖層,釋放servercontext。關(guān)鍵代碼如下:
運(yùn)行程序,可以在 IE頁(yè)面中瀏覽,效果如圖 3 (a),同時(shí)在ArcCatalog中預(yù)覽hefeitd服務(wù),該地圖服務(wù)與IE頁(yè)面中看到的一樣,包括合肥地區(qū)的影像數(shù)據(jù)圖層和道路交通網(wǎng)矢量數(shù)據(jù)圖層。
圖3 IE瀏覽器中顯示效果圖
4.3 兩種服務(wù)的比較
當(dāng)選擇的是池化服務(wù)時(shí),點(diǎn)擊delete layer按鈕后,道路交通網(wǎng)的矢量圖層被刪除,只留下影像圖層,如圖3(b),同時(shí)在ArcCatalog中預(yù)覽,效果如圖4(a),可以發(fā)現(xiàn)和瀏覽器中的效果一樣,也是只有影像圖層,沒(méi)有矢量的圖層。這是池化服務(wù)的效果,因?yàn)樵跒g覽器中刪除的圖層時(shí)使用的服務(wù)器對(duì)象并沒(méi)有被銷毀,然后被ArcCatalog使用,這樣在IE瀏覽器中的操作就影響了其他用戶的地圖狀態(tài)。
圖4 ArcCatalog顯示效果圖
在ArcCatalog中把hefeitd服務(wù)修改為非池化,點(diǎn)擊delete layer按鈕后,在IE中瀏覽頁(yè)面,發(fā)現(xiàn)道路交通網(wǎng)的矢量圖層被刪除,只留下影像圖層,如圖3(b),同時(shí)在ArcCatalog中預(yù)覽hefeitd服務(wù),可以發(fā)現(xiàn)和IE瀏覽器中的效果不一樣,影像圖層和矢量圖層都存在。這是非池化服務(wù)的效果,如圖4(b)。ArcCatalog和瀏覽器查看地圖時(shí)使用的并不是同一個(gè)服務(wù)器對(duì)象,所以彼此之間沒(méi)有產(chǎn)生干擾。
在ArcGIS Server開(kāi)發(fā)過(guò)程中,服務(wù)器對(duì)象選擇池化或非池化服務(wù)方式各有優(yōu)勢(shì),池化的服務(wù)可以在多個(gè)應(yīng)用程序之間會(huì)話中共享,當(dāng)應(yīng)用程序會(huì)話返回一個(gè)池化服務(wù)實(shí)例到服務(wù)器,就可以被其他應(yīng)用程序的會(huì)話使用,故池化服務(wù)適用于無(wú)狀態(tài)操作,而非池化服務(wù)可以維護(hù)狀態(tài),尤其是在數(shù)據(jù)編輯的功能實(shí)現(xiàn)時(shí)使用。在實(shí)際使用過(guò)程中應(yīng)根據(jù)具體情況選擇合適的服務(wù)類型,以便WebGIS系統(tǒng)發(fā)揮最佳的性能。
[1]陳非.ArcGIS Server 9.2的概念和新特性[R].北京:ESRI中國(guó)(北京)有限公司,2006
[2]沈百玲.AreGIS Server簡(jiǎn)介[R].北京:ESRI中國(guó)(北京)有限公司,2004
[3]吳功和,叢明日.基于ArcGIS Server分布式GIS的應(yīng)用[J].測(cè)繪科學(xué)技術(shù)學(xué)報(bào),2006.23(1):52~55
[4]劉光,唐大仕.Web GIS開(kāi)發(fā)——ArcGIS Server與.NET [M].北京:清華大學(xué)出版社,2009
[5]汪昊琦.基于ArcGIS的企業(yè)級(jí)GIS系統(tǒng)開(kāi)發(fā)與應(yīng)用[D].上海:華東師范大學(xué),2007.6
[6]ESRI.ArcGIS Server Developers Guide[R].2006
[7]康玲,傅俊鋒,王懷清等.基于ArcGIS Server的WebGIS應(yīng)用系統(tǒng)開(kāi)發(fā)[J].水利能源科學(xué),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—),男,在讀碩士研究生,研究方向?yàn)榈乩硇畔⑾到y(tǒng)與數(shù)字測(cè)繪技術(shù)。