下面的小樣本來體驗一下池化和非池化地圖服務的區別。步驟如下:
1,發布一個地圖服務,選擇作為Pooled服務,其它設定預設,這裡假設服務名稱world。該地圖服務包括兩個圖層,一個是世界影像資料圖層,另一個是世界大洲的向量資料圖層。
2,在VS 2005中建立一個網站。向Default.aspx頁面中添加Map控制項和MapResourceManager控制項,並且使用world服務。向頁面中添加一個asp.net的web伺服器控制項Button,標題改為delete layer。
3,向delete layer按鈕的Click事件添加處理方法。首先使用具有agsadmin許可權的使用者串連arcgis server,然後建立servercontext,擷取IMap介面,刪除一個圖層,釋放servercontext。代碼如下:
protected void Button1_Click(object sender, EventArgs e)
{
ESRI.ArcGIS.ADF.Identity identity = new ESRI.ArcGIS.ADF.Identity("user", "password", "hostname");
ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsconnection;
agsconnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection("hostname", identity);
agsconnection.Connect();
IServerObjectManager som = agsconnection.ServerObjectManager;
IServerContext serverContext = som.CreateServerContext("world", "MapServer");
IMapServer mapServer = serverContext.ServerObject as IMapServer;
IMapServerObjects mapServerObjects = mapServer as IMapServerObjects;
IMap map = mapServerObjects.get_Map(mapServer.DefaultMapName);
map.DeleteLayer(map.get_Layer(0));
mapServerObjects.RefreshServerObjects();
serverContext.ReleaseContext();
}
4,在IE中瀏覽頁面,效果如下。
5,同時在ArcCatalog中預覽world服務,效果如下。
6,點擊delete layer按鈕後,大洲的向量圖層被刪除,只留下影像圖層,效果如下。
7,同時在ArcCatalog中預覽world服務,效果如下,可以發現和瀏覽器中的效果一樣,也是只有影像圖層,沒有向量的圖層。這是Pooled服務的效果,因為在瀏覽器中刪除的圖層時使用的伺服器對象並沒有被銷毀,然後被ArcCatalog使用,這樣在IE中的操作就影響了其它使用者的地圖狀態。
Not Pooled
8,在ArcCatalog中把world服務修改為Not pooled,如所示。
9,把delete layer按鈕的Click事件處理方法修改為如下代碼:
protected void Button1_Click(object sender, EventArgs e)
{
ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality agsMapFunctionality =
(ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality)Map1.GetFunctionality(0);
MapResourceLocal m_AGSLocalMapResource = (MapResourceLocal)agsMapFunctionality.Resource;
IServerContext serverContext = m_AGSLocalMapResource.ServerContextInfo.ServerContext;
IMapServer mapServer = serverContext.ServerObject as IMapServer;
IMapServerObjects mapServerObjects = mapServer as IMapServerObjects;
IMap map = mapServerObjects.get_Map(mapServer.DefaultMapName);
map.DeleteLayer(map.get_Layer(0));
mapServerObjects.RefreshServerObjects();
}
10, 在IE中瀏覽頁面,效果如下。
11,同時在ArcCatalog中預覽world服務,效果如下。
12,點擊delete layer按鈕後,大洲的向量圖層被刪除,只留下影像圖層,效果如下。
13,同時在ArcCatalog中預覽world服務,效果如下,可以發現和瀏覽器中的效果不一樣,影像圖層和向量圖層都存在。這是NotPooled服務的效果,ArcCatalog和瀏覽器查看地圖時使用的並不是同一個serverobject,所以彼此之間沒有產生幹擾。
Pooled和Not Pooled各有優勢,從我們的樣本上看Pooled服務效能更好一些,但是,Not Pooled服務可以維護狀態,尤其是在資料編輯的功能實現時使用。