关于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的垃圾回收机制进行回收!
    总的来说,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();

    在非池式模式下,一旦context释放,那么下次将会被重建,如果是在是池式,那么并不会真正在SOC上释放,只是清空.8
posted @ 2008-02-25 21:12  GIS小能  阅读(423)  评论(1编辑  收藏  举报