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