天天看点

ArcGIS Server中Pooled 和Not Pooled服务的区别(转自HiGIS.cn )

下面的小示例来体验一下池化和非池化地图服务的区别。步骤如下:

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服务,效果如下,可以发现和浏览器中的效果不一样,影像图层和矢量图层都存在。这是Not Pooled服务的效果,ArcCatalog和浏览器查看地图时使用的并不是同一个serverobject,所以彼此之间没有产生干扰。

Pooled和Not Pooled各有优势,从我们的示例上看Pooled服务性能更好一些,但是,Not Pooled服务可以维护状态,尤其是在数据编辑的功能实现时使用。

ArcGIS Server中Pooled 和Not Pooled服务的区别(转自HiGIS.cn )