ArcGIS 10.1 for Server 扩展开发(SOE)

       第一章为什么使用SOE

      在ArcGIS 10.1中ArcGIS Server不在支持DCOM方式的连接,这也就意味着我们不能通过本地方式的连接使用ArcObjects提供的更多功能,所以我们推荐一种新的方式来实现这些功能,这种方式就是SOE服务器对象扩展,一个SOE(Server Object Extension)就是一个包含一组方法的类,这个类可以在SOC(ArcGIS 10.1 for Server进程,全称是ArcSOC.exe)中运行,并且可以被web应用程序调用。
Server Objects是粗粒度的AO组件,是一个可以执行特定操作的高级对象,它隐藏了细粒度的ArcObject。Server Objects的粗粒度接口支持对于像绘制地图或地理编码等整体性任务。Server objects也有SOAP接口,可以把server objects暴露成Web Service,从而可以被客户端使用。
 SOE是开发者的一个高级选项,使您能够将ArcGIS Server服务基本功能进行扩展。SOE具有两大优势:
  1.SOE可以作为SOAP或REST Web服务,使得用ArcGIS Web APIs建立的客户(用于JavaScript、Flex、Silverlight、iOS等)以便调用这些应用程序。事实上,您的SOE将出现在ArcGIS Services Directory之内,并将提供特性设置、基本类型等ArcGIS APIs能够理解的典型对象类型。
  2.SOE能够对ArcObjects进行有效封装,提供理想环境以快速执行您的指令。 .
可以建立一个SOE,使用动态分段获取里程标志位置,或者实现几何网络分析(在ArcGIS 10的时候,因为工具箱中没有提供几何网络的GP,因此要实现几何网络的分析,可以通过这种办法)
  SOE开发需要ArcObjects、.NET或Java以及REST与SOAP等Web服务通信技术的知识。ArcObjects SDK具有多种可供您进行校验的样本,即可用于Java也可用于.NET。
 在SOE的开发过程中,我们必须清楚,我们需要在SOE中将请求获取,然后将传入的参数转化为AO,然后通过AO处理,再将处理的结果转成json格式,传给客户端,客户端得到json格式的结果,然后解析。
下图描述了请求响应的整个过程,如下图:


 
下图描述了请求回复的整个过程,如下图:
 


第二章SOE使用

1.1 必选接口
1.1.1 IRESTRequestHandler 接口
该接口主要有下面两个方法:
        string GetSchema();
        byte[] HandleRESTRequest()


1.1.1.1 IRESTRequestHandler.handleRESTREquest() 方法主要有下面两个作用:
回调资源和操作的方法
获取资源在实例级别的描述
该方法在识别这两个作用的时候是通过operationName参数,如果该参数是空字符产那就是第二个作用,否则是第一个作用。
该方法的参数如下: 
     1. String capabilities:一组被资源授权的操作,可以为空字符串 
     2. String resourceName: 资源名称. 空字符串表示根级别,子资源会通过‘/’ 表示 
     3. String operationName: 操作名称
     4. String operationInput: 操作的参数,JSON格式
    5. String outputFormat:客户端请求的输出格式,如JSON,AMF 
    6. String[] responseProperties: 通过操作返回的一组键值对,逗号分开
1.1.1.2 IRESTRequestHandler.getSchema() 方法
以JSON格式返回SOE的资源列表
1.1.2 IServerObjectExtension
该接口主要有个方法:Init(IServerObjectHelper pSOH)和void Shutdown();
当Server启动的时候会调用该方法,并将IServerObjectHelper对象传入,该接口是对Server对象的弱引用,可以通过IServerObjectHelper.ServerObject得到服务器对象。
Shutdown方法用在服务器关闭时调用,经常我们在该方法中释放SOE中使用的资源。


1.2 可选接口
1.2.1 IObjectConstruct
该接口只有一个方法Construct,该方法在Init方法执行后,立即被执行,如果我们的SOE有配置属性,就可通过该方法的参数得到,该方法只调用1次,我们可以将SOE中用的的比较耗费资源的逻辑写在该方法中,比如:获取地图代码,或者你始终操作某一个图层,就可以把获取该图层的代码写在这里。
1.2.2 IObjectActivate
当init和Construct调用后,SOE的对象已经被创建,并且相应的配置信息也得到了,如果SOE的整个逻辑中需要不停的获取和释放服务器上下文,那么就必须实现改接口,改接口有两个方法: activate()和deactivate(),当客户端调用CreateServerContext()
的时候activate()方法被调用,当客户端释放服务器上下文对象时deactivate()方法被调用。

SOE的执行过程
在对接口介绍的时候,我们已经提到了SOE的的运行过程,我们通过下面的图可进一步了解:

 


 
1.3 创建SOE
现在我们创建一个完整的SOE,在VS2010中新建一个项目,选择Server Object Extention,并在右边选择REST 模板,如下图:


 
当点了确定之后,我们可以看到VS已经为我们生成了一个RestSOETest的类,该类已经实现了了我们前面介绍过的接口,如下:

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值