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. ArcObjects for .Net 或者ArcObjects for Java;
  2. Web service通信技术,
  3. SOAP和REST服务的使用;
  4. SOE需在客户端调用,需要有ArcGIS Server Web API等相关的知识背景。

1.3 SOE与gp服务

对web端的扩展除了SOE的形式还可以采用GP(Geo Processing)服务,什么时候该用GP服务,什么时候该用SOE呢?

GP服务的优势在于:

  1. 在尽可能少的编写代码的情况下,可以通过在ModelBuilder中通过拖拽对话框的形式构建和发布服务
  2. 调用GP服务后,其可以在服务器端一直执行,期间可以执行其他操作,直到操作完成后返回结果,适合耗时长的复杂处理。

而GP服务的缺点在于:

  1. 每次请求,gp服务都需要实例化,内存消耗大,耗时。
  2. 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://www.cnblogs.com/myyouthlife/p/3284291.html

安装完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的对象进行释放。

Server Objects Extension(SOE)开发(一)的更多相关文章

  1. Server Objects Extension(SOE)开发(二)

    前言 SOE的提供了REST和Soap两种模板,只要在模板特定的方法中添加自己的业务逻辑代码即可,开发流程非常的简单便捷.那怎么知道自己的业务逻辑代码该写在模板的那个方法里面呢?这就需要很好的理解SO ...

  2. Server Objects Extension(SOE)开发(三)

    前言 SOE出现之前,一些复杂.耗时的gis操作,通常都是使用gp服务实现的.前面将gp服务和soe进行了对比分析,为了测试两种的效率,曾经做了个demo,使用soe和gp同时执行相同的业务逻辑,记录 ...

  3. ArcGIS SOE开发异常之 ClassFactory cannot supply requested class

    最近SOE开发一个功能,辛辛苦苦写完, 异常: ClassFactory cannot supply requested class 辛苦解决: 百度一下,描述这个问题的帖子很多,不过内容基本一致.大 ...

  4. 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》

    一.课程笔记 1.1  软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...

  5. ArcGIS Server SOE开发之奇怪异常:

    添加之后结果显示如下:fjsontokenezkBvir0Tj5q31UEst7pTFPwrwocmHklCajKeh-xXM91qWdBXDuQMmtGcaHaaXCJ 具体如下: 该SOE扩展在另 ...

  6. SQL Server 2008 R2 企业版/开发版/标准版(中英文下载,带序列号)

    一. 简体中文 1. SQL Server 2008 R2 Developer (x86, x64, ia64) – DVD (Chinese-Simplified) File Name: cn_sq ...

  7. 开源sip server & sip client 和开发库 一览

    http://www.voip-info.org/wiki/view/Open+Source+VOIP+Software http://blog.csdn.net/xuyunzhang/article ...

  8. Open Source VOIP applications, both clients and servers (开源sip server & sip client 和开发库)

    SIP Proxies SBO SIP Proxy Bypass All types of Internet Firewall JAIN-SIP Proxy Mini-SIP-Proxy A very ...

  9. sqlserver 下载地址(SQL Server 2008 R2 中英文 开发版/企业版/标准版 下载)

    转自:http://blog.sina.com.cn/s/blog_624b1f950100pioh.html   注:企业版无法安装在xp和win7,开发版才可以! 一. 简体中文 1. SQL S ...

随机推荐

  1. javascript 清空数组的方法

    1,splice var ary = [1,2,3,4]; ary.splice(0,ary.length); console.log(ary); // 输出 [],空数组,即被清空了 2,lengt ...

  2. Android设置拍照或者上传本地图片

    效果例如以下: 看代码: MainActivity类中: package com.example.ceshidemo; import java.io.ByteArrayOutputStream; im ...

  3. 转:介绍一个好用的抓取dump的工具-ProcDump

    介绍一个好用的抓取dump的工具-ProcDump Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash ...

  4. android应用多线程守护让你非常难杀死它

    1.android 应用开启后启动一个服务 public class TestserviceActivity extends Activity { /** Called when the activi ...

  5. 自己动手开发更好用的markdown编辑器-05(粘贴上传图片)

    这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/28/hexomd-05/   文章目录 1. 七牛云存储 1.1. 系统 ...

  6. Atitit.木马病毒 webftp 的原理跟个设计

    Atitit.木马病毒 webftp 的原理跟个设计 ftp木马的效果 文件传播 文件列表 文件内容查看 作者::  ★(attilax)>>> 绰号:老哇的爪子 ( 全名::Att ...

  7. nginx服务器部署

    nginx(“engine x”)是一个高性能的HTTP和反向代理服务器.   安装nginx Linux下  sudo apt-get install nginx windows下 下载 nginx ...

  8. mvn test中文乱码处理

    mvn test执行测试的时候调用的实际是maven-surefire-plugin插件因为mvn启动时会新建一个jvm进程,默认没有指定编码所以中文乱码了.启动时`<argLine>-D ...

  9. ThreadLocal使用方法

      创建一个Bean,通过不同的线程对象设置Bean属性,保证各个线程Bean对象的独立性.   /**  * Created by IntelliJ IDEA.  * User: leizhimin ...

  10. oracle如何将数据导入到另一个表空间

    某个用户的数据在USER表空间里,如果多个用户的数据都在USERS表空间内,将严重影响系统性能,一般在系统迁移的时候,在新的系统里希望导入 一个独立的用户表空间,但是经常无法导入用户指定的缺省表空间, ...