【20110224-01】ArcGIS Server与非池化服务建立的 ArcGIS Server Internet 连接的速度非常慢 解决办法

今天做了一个非常简单的地图测试程序

服务发布在本机上-方式为非池化-程序连接采用ArcGIS Server Internet 方式 运行之后发现执行非常慢,查询esri帮助得到如下建议:

                                 

               

通过 ArcGIS Server 本地连接而非 ArcGIS Server Internet 连接来使用非池化服务。

进入正题进入正题:

Internet 连接以完全无状态方式使用服务。通过 Internet 发送的每个服务请求均会在服务的后端 DCOM 组件上生成上下文获取及发布。如果服务为非池化服务,则每个上下文发布都将造成服务实例的取缔,并对其进行重新创建。这种服务的运算量非常大,尤其是当客户端向服务发送多个请求时。例如,一个简单的 Web ADF 制图应用程序可能要连接到服务,以获取地图对象、MapDescription 和 ImageDescription,然后执行绘图请求。上述操作中的每一个都包括上下文获取和发布。如果服务为非池化服务,且客户端正在通过 Internet 连接该服务,则上述操作中的每一个都将造成服务实例的创建及取缔,从而降低性能。

 

现在问题又来了,当我采用ArcGIS Server Local方式连接资源的时候,连续2次打开页面后,第三次请求就不能显示地图,在此牵涉到池化和非池化以及Internet和Local两种连接方式的区别:

 

  ArcGIS Server Internet:

                         ArcGIS Server Internet方式去连接GIS Server的时候,就相当于去连接标准的web service, 因此只有这些web service暴露出来的webmethod才可以调用,

                         因此通过ArcGIS Server Internet方式去连接得到某个服务的时候所能得到的功能是很有限的。如上所说,Internet 连接以完全无状态方式使用服务,通过 Internet

                         发送的每个服务请求均会在服务的后端 DCOM 组件上生成上下文获取及发布,Internet方式连接非池化的数据服务的时候,每个上下文发布都将造成服务实例的取缔,

                         并对其进行重新创建,说白了即必须是SOC.exe的频繁的取缔和创建,这种服务的运算量非常大,又是在地图显示之前,导致页面加载缓慢。                   

    ArcGIS Server Local:

                        ArcGIS Server Local方式去连接GIS Server(这里讲的只是针对非池化)的时候,首先创建一个服务实例,成功连接地图服务后服务实例并没有被取缔。
                   
                       到了这里有人或许 认为在浏览器关闭的时候会释放这个实例,其实不然,浏览器被关闭的时候GISServer服务器并不知道它被关掉了,session还一直有效,
                   
                       所以这个服务实例还被占用着,直到session超时被服务器强制回收。如果服务实例全部被占用下一个请求将无法成功取缔实例,就会导致无法访问.
                    
                       因此用local方式连接时 必须及时的释放服务实例

 

       

 

posted @ 2011-02-24 16:39  WillWayer  阅读(1785)  评论(1编辑  收藏  举报