Server Objects Extension(SOE)开发(一)
分享
1.SOE相关
1.1 什么是SOE
SOE(Server对象扩展:Server Object Extenstion),其通过采用ArcObjects的相关的接口、类库对ArcGIS Server的基本的功能进行扩展,使那些通过Web api 不能或者不易实现的功能,可以通过SOE的形式,使得桌面实现方式可以在web服务端实现。arcgis server 从10.1版本以后就不在支持本地调用ao,故目前SOE是扩展服务端能力的主要途径。
1.2 SOE开发知识背景
SOE的开发需要开发者具有下面一些知识背景:
1.3 SOE与gp服务
对web端的扩展除了SOE的形式还可以采用GP(Geo Processing)服务,什么时候该用GP服务,什么时候该用SOE呢?
GP服务的优势在于:
而GP服务的缺点在于:
故当有些需要实现的功能没有提供gp工具或者需要高效,功能点单一可以采用soe实现。
1.4 SOE与Geometry Service
Geometry Service(几何服务) 提供了一些基本的GIS操作,如缓冲区的构建,空间量算,空间关系测算可以采用Geometry Service 而无需使用SOE或者GP服务
2.SOE的开发流程
2.1 安装ArcObjects sdk
soe的本质就是在服务器端使用AO对象来扩展服务能力,其开发需要使用到ArcObjects sdk。
tips1:在desktop和server的安装介质中,都具有ArcObjects sdk安装项。在soe开发的时候,建议使用server安装介质中的sdk。因为server是64位,而桌面的端的是32位的。
tips2:安装arcgis server 的时候注意开启 .net支持,否则soe部署的时候会出现前面提到的错误。错误参见:http://zhihu.esrichina.com.cn/?/question/6978
安装完sdk后,就可以在编译器中看到soe模板了,以vs 为例。tips:必须选择.net framework 3.5,vs2010默认选择为4.0,故看不见两个模板
2.2 在soe模板中编写代码
目前soe的开发模板有:soap和rest两种,建议使用rest模板。
2.3 编译工程生成.soe 文件
在soe中模板中编写完后,编译工程,在工程目前的启动目录下会生成.soe 文件。10.1soe的编译比较简单,无需10.0采用命令行的形式。
tips:.soe 文件其实是一个zip包,可以通过将soe后缀改成zip,解压可以发现,.soe文件包含是类文件和相关的dll
2.4 部署soe
soe的部署在manager 站点中,在10.1的AGS server中soe无需注册,直接在站点的扩展中部署。
2.5 服务中启用soe
soe是对服务的扩展,故其需要在某一服务中启用。使用该服务作为soe的宿主服务,soe的生命周期受该服务的影响,soe的并发和soe的请求的有效时间,都有其宿主的地图服务决定。
tips:arcgis server 10.2以前,soe仅支持对地图服务的扩展,10.2开发,支持对image server的扩展。
2.6 客户端调用soe
目前esri的三大web api:javascipt,flex,和silverlight都提供了对soe的调用
3.soe的生命周期
使用soe进行服务扩展,需要掌握soe的生命周期
3.1 soe的初始化阶段
在部署完soe,对soe宿主的地图服务进行刷新重启的时候,进入该阶段。只要soe的宿主服务不重启,soe的的初始化就不会执行,所以客户端即使多次请求soe,只要不重新启动服务,实例化只执行一次,这也是为什么说soe的请求效率比gp服务高的原因。
该阶段主要执行SOE模板中IServerObjectExtension接口下的Init()方法。
3.2 soe的构造阶段
该阶段紧接初始化阶段。执行IObjectConstruct接口下的Construct()方法,通常在该方法下可以获取soe的属性页中的内容。Init()和Construct()方法由于通常只执行一次,所以可以将soe中只需执行一次的耗时操作放在这两方法中。
3.3 活动阶段
当soe接收到客户端的请求,开始活动,该阶段实现IObjectActivate接口的Activate()的方法,该接口在soe的模板中并没有实现,是选择实现接口。当需要业务逻辑在接受http请求触发。
3.4 请求处理
该阶段是SOE的业务逻辑主要执行阶段。主要包括三个方面的内容:该阶段反序列化客户端的请求参数,将json格式的参数反序列化成AO对象或者其他业务中需要的对象,如string等;处理请求,桌面的ao程序可以移植;将请求的结果序列化成json或者其他http协议所支持的数据类型,返回到前端
3.5 请求的结束
一次soe请求结束。该阶段主要实现IObjectActivate接口的Deactivate()的方法,同样是选择实现,当业务逻辑在一次请求结束时可以在该方法下实现。当具有多次请求的时候,就会重复图中粉红色的部分。不会再次实例化soe,这是soe效率高的一个原因。
3.6 soe关闭
soe关闭。实现接口ISeverObjectExtension下面的shutdown() 方法。可以在该方法里面对soe的对象进行释放。
文章来源:http://www.cnblogs.com/myyouthlife/p/3026795.html
1.1 什么是SOE
SOE(Server对象扩展:Server Object Extenstion),其通过采用ArcObjects的相关的接口、类库对ArcGIS Server的基本的功能进行扩展,使那些通过Web api 不能或者不易实现的功能,可以通过SOE的形式,使得桌面实现方式可以在web服务端实现。arcgis server 从10.1版本以后就不在支持本地调用ao,故目前SOE是扩展服务端能力的主要途径。
1.2 SOE开发知识背景
SOE的开发需要开发者具有下面一些知识背景:
- ArcObjects for .Net 或者ArcObjects for Java;
- Web service通信技术,
- SOAP和REST服务的使用;
- SOE需在客户端调用,需要有ArcGIS Server Web API等相关的知识背景。
1.3 SOE与gp服务
对web端的扩展除了SOE的形式还可以采用GP(Geo Processing)服务,什么时候该用GP服务,什么时候该用SOE呢?
GP服务的优势在于:
- 在尽可能少的编写代码的情况下,可以通过在ModelBuilder中通过拖拽对话框的形式构建和发布服务
- 调用GP服务后,其可以在服务器端一直执行,期间可以执行其他操作,直到操作完成后返回结果,适合耗时长的复杂处理。
而GP服务的缺点在于:
- 每次请求,gp服务都需要实例化,内存消耗大,耗时。
- GP提供的工具比较固定,有些操作并不能通过Toolbox实现一步操作完成,这时候可以采用SOE进行相关的功能的编写。
故当有些需要实现的功能没有提供gp工具或者需要高效,功能点单一可以采用soe实现。
1.4 SOE与Geometry Service
Geometry Service(几何服务) 提供了一些基本的GIS操作,如缓冲区的构建,空间量算,空间关系测算可以采用Geometry Service 而无需使用SOE或者GP服务
2.SOE的开发流程
2.1 安装ArcObjects sdk
soe的本质就是在服务器端使用AO对象来扩展服务能力,其开发需要使用到ArcObjects sdk。
tips1:在desktop和server的安装介质中,都具有ArcObjects sdk安装项。在soe开发的时候,建议使用server安装介质中的sdk。因为server是64位,而桌面的端的是32位的。
tips2:安装arcgis server 的时候注意开启 .net支持,否则soe部署的时候会出现前面提到的错误。错误参见:http://zhihu.esrichina.com.cn/?/question/6978
安装完sdk后,就可以在编译器中看到soe模板了,以vs 为例。tips:必须选择.net framework 3.5,vs2010默认选择为4.0,故看不见两个模板
2.2 在soe模板中编写代码
目前soe的开发模板有:soap和rest两种,建议使用rest模板。
2.3 编译工程生成.soe 文件
在soe中模板中编写完后,编译工程,在工程目前的启动目录下会生成.soe 文件。10.1soe的编译比较简单,无需10.0采用命令行的形式。
tips:.soe 文件其实是一个zip包,可以通过将soe后缀改成zip,解压可以发现,.soe文件包含是类文件和相关的dll
2.4 部署soe
soe的部署在manager 站点中,在10.1的AGS server中soe无需注册,直接在站点的扩展中部署。
2.5 服务中启用soe
soe是对服务的扩展,故其需要在某一服务中启用。使用该服务作为soe的宿主服务,soe的生命周期受该服务的影响,soe的并发和soe的请求的有效时间,都有其宿主的地图服务决定。
tips:arcgis server 10.2以前,soe仅支持对地图服务的扩展,10.2开发,支持对image server的扩展。
2.6 客户端调用soe
目前esri的三大web api:javascipt,flex,和silverlight都提供了对soe的调用
3.soe的生命周期
使用soe进行服务扩展,需要掌握soe的生命周期
3.1 soe的初始化阶段
在部署完soe,对soe宿主的地图服务进行刷新重启的时候,进入该阶段。只要soe的宿主服务不重启,soe的的初始化就不会执行,所以客户端即使多次请求soe,只要不重新启动服务,实例化只执行一次,这也是为什么说soe的请求效率比gp服务高的原因。
该阶段主要执行SOE模板中IServerObjectExtension接口下的Init()方法。
3.2 soe的构造阶段
该阶段紧接初始化阶段。执行IObjectConstruct接口下的Construct()方法,通常在该方法下可以获取soe的属性页中的内容。Init()和Construct()方法由于通常只执行一次,所以可以将soe中只需执行一次的耗时操作放在这两方法中。
3.3 活动阶段
当soe接收到客户端的请求,开始活动,该阶段实现IObjectActivate接口的Activate()的方法,该接口在soe的模板中并没有实现,是选择实现接口。当需要业务逻辑在接受http请求触发。
3.4 请求处理
该阶段是SOE的业务逻辑主要执行阶段。主要包括三个方面的内容:该阶段反序列化客户端的请求参数,将json格式的参数反序列化成AO对象或者其他业务中需要的对象,如string等;处理请求,桌面的ao程序可以移植;将请求的结果序列化成json或者其他http协议所支持的数据类型,返回到前端
3.5 请求的结束
一次soe请求结束。该阶段主要实现IObjectActivate接口的Deactivate()的方法,同样是选择实现,当业务逻辑在一次请求结束时可以在该方法下实现。当具有多次请求的时候,就会重复图中粉红色的部分。不会再次实例化soe,这是soe效率高的一个原因。
3.6 soe关闭
soe关闭。实现接口ISeverObjectExtension下面的shutdown() 方法。可以在该方法里面对soe的对象进行释放。
文章来源:http://www.cnblogs.com/myyouthlife/p/3026795.html
0 个评论
推荐内容
- ArcGIS Pro 2.4向独立server发布服务步骤
- Linux上安装ArcGIS Enterprise超详细教程——以Redhat7.2上安装ArcGIS Enterprise 10.5为例
- ArcGIS for Server 10.x 许可授权手册
- Portal for ArcGIS 10.X许可授权手册 (Windows版)
- arcgis server 无法手动删除切片
- ArcGIS for Server内置JS Viewer的离线部署和配置
- Linux上安装ArcGIS for Server超详细教程——以Redhat6.5上安装ArcGIS for Server 10.3.1为例
- 如何创建Geometry Service?
- 地图服务优化策略
相关问题
- gis开发群的管理不讲理,求围观。
- 安装arcgis server 需要不需要安装网络服务器(如IIS和Apache)和.Net Frameworkma?
- 在windows server2008 R2 64位中安装了portal 10.5 设置好托管arcgis server站点,并用data store为托管数据库,发布数据出错
- 请问大家学习AE开发都参考了哪些资料?
- arcgis runtime for andriod 100.1 如何使用eclipse开发
- arcgis 门户能正常访问,但是arcgis server 管理界面打不开?
- ArcGIS Server服务状态正在停止
- Linux下如何将ArcGIS Server的服务端口改为80
- ArcGIS10.5配置data store时报错Unable to configure the ArcGIS Data Store with the GIS Server.
- ArcGIS Server制作的缓存地图服务中,能否实现大比例尺下楼房阴影类似的3d效果?
- Arcgis for server 集群调用