关于SO
SO对象是存在于SOC机器上面的,主要有以下几种SO:
- esriCarto.MapServer
- esriLocation.GeocodeServer
- esriGeodatabase.GeodataServer
- esriGlobeCore.GlobeServer
如何从服务器中获取SO呢,当我们向服务器请求的时候,便可以获取SO对象,我们可以想象server context就是一个程序,被服务器所管理的,而SO对象则是在其中运行生存.这个SO我们可以认为是地图对象,层对象等其他一些相关的对象.
同样接下来,我们讨论的是服务器与服务器对象的关系,如果一个服务器中只有一个对象,那么可以用AS转化成服务器对象
比如:
IMapServer pMapServer = pServerContext.ServerObject as IMapServer;
IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
IMap pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);
在完成一个任务后,记得将server context释放!如果没有这句的话,那么将依赖.net的垃圾回收机制进行回收!IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
IMap pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);
总的来说,SO是非常重要的,我们所有的处理都是由其开始,也就是说这就是我们的一个源!
当涉及到一些网络扩展分析时,需要用到SO的扩展:
IServerObjectManager pSOM;
IServerContext pServerContext = pSOM.CreateServerContext("RedlandsMap", "MapServer");
IMapServer pMapServer = pServerContext.ServerObject as IMapServer;
IServerObjectExtensionManager pSOExtManager = pMapServer as IServerObjectExtensionManager;
IServerObjectExtension pSOExt = pSOExtManager.FindExtensionByName("NAServer");
INAServer naserver = pSOExt as INAServer;
// do some network analysis
pServerContext.ReleaseContext();
IServerContext pServerContext = pSOM.CreateServerContext("RedlandsMap", "MapServer");
IMapServer pMapServer = pServerContext.ServerObject as IMapServer;
IServerObjectExtensionManager pSOExtManager = pMapServer as IServerObjectExtensionManager;
IServerObjectExtension pSOExt = pSOExtManager.FindExtensionByName("NAServer");
INAServer naserver = pSOExt as INAServer;
// do some network analysis
pServerContext.ReleaseContext();
在非池式模式下,一旦context释放,那么下次将会被重建,如果是在是池式,那么并不会真正在SOC上释放,只是清空.8
所有版权归小能所有哦!!!