[转]池化和非池化地图服务的区别

本文通过示例对比池化(Pooled)与非池化(NotPooled)地图服务的不同效果。前者在不同客户端间共享地图状态,导致交互影响;后者则独立管理每个客户端的地图状态,避免了干扰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面的小示例来体验一下池化和非池化地图服务的区别。步骤如下:
1,发布一个地图服务,选择作为Pooled服务,其它设置默认,这里假设服务名称world。该地图服务包括两个图层,一个是世界影像数据图层,另一个是世界大洲的矢量数据图层。


120537433060-clip-image001.png
2,在VS 2005中创建一个站点。向Default.aspx页面中添加Map控件和MapResourceManager控件,并且使用world服务。向页面中添加一个asp.net的web服务器控件Button,标题改为delete layer。
120537433060-clip-image003.png
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();
}
120537433062-clip-image005.png
4,在IE中浏览页面,效果如下。
clip-image007.png
5,同时在ArcCatalog中预览world服务,效果如下。
clip-image009.png
6,点击delete layer按钮后,大洲的矢量图层被删除,只留下影像图层,效果如下。
clip-image011.png
7,同时在ArcCatalog中预览world服务,效果如下,可以发现和浏览器中的效果一样,也是只有影像图层,没有矢量的图层。这是Pooled服务的效果,因为在浏览器中删除的图层时使用的服务器对象并没有被销毁,然后被ArcCatalog使用,这样在IE中的操作就影响了其它用户的地图状态。
clip-image013.png
Not Pooled
8,在ArcCatalog中把world服务修改为Not pooled,如下图所示。
clip-image015.png
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中浏览页面,效果如下。
clip-image007.png
11,同时在ArcCatalog中预览world服务,效果如下。
clip-image009.png
12,点击delete layer按钮后,大洲的矢量图层被删除,只留下影像图层,效果如下。
clip-image011.png
13,同时在ArcCatalog中预览world服务,效果如下,可以发现和浏览器中的效果不一样,影像图层和矢量图层都存在。这是NotPooled服务的效果,ArcCatalog和浏览器查看地图时使用的并不是同一个serverobject,所以彼此之间没有产生干扰。
clip-image020.png
Pooled和Not Pooled各有优势,从我们的示例上看Pooled服务性能更好一些,但是,Not Pooled服务可以维护状态,尤其是在数据编辑的功能实现时使用。

转载于:https://www.cnblogs.com/aooyu/archive/2009/12/11/1622055.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值