强大的服务端扩展手段 — ArcGIS Server SOE

合集下载

ArcGIS服务对象扩展(SOE)新手自学笔记(5):注册与调试

ArcGIS服务对象扩展(SOE)新手自学笔记(5):注册与调试

ArcGIS服务对象扩展(SOE)新⼿⾃学笔记(5):注册与调试上⼀篇到现在过去好⼏天了,本来打算⽤ESRI官⽅⾃带的例⼦呢,后来觉得还是应该实践⼀下。

这⼏天都在忙着写这个例⼦,其中也出现了好多问题,从⼀开始思考解决问题的⽅法,到找代码,再调试成功,费了不少事,好在问题都已经解决了。

不喜欢说废话,还是忍不住说了这么多,下⾯正式进⼊主题。

⾸先说说我们要解决的问题。

gp服务⼴泛使⽤的⼀个原因是他可以做栅格数据的分析,那好我们就⽤SOE来解决⼀个插值问题。

在gp服务中,我们可以通过设置输⼊输出类型来保客户端成功加载分析结果,⼤部分分析结果是以图⽚形式传到客户端。

在SOE中理论上是可以设置输出图⽚形式,但帮助中只是简单地说了⼏句,很不详细,所以我⽤的⽅法是将栅格分类后转换成⽮量数据,再将⽮量数据序列化成json格式,传给客户端。

流图如下:获取要素类---》插值---》重分类---》栅格转⾯---》序列化成json---》客户端1.编写代码新建⼀个⼯程,命名为Saturation⾸先加⼊以下引⽤:代码:View Code1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5/doc/11b6d0640b1c59eef8c7b4a7.html6using System.Collections.Specialized;78using System.Runtime.InteropServices;9using System.EnterpriseServices;1011using ESRI.ArcGIS.esriSystem;12using ESRI.ArcGIS.Server;13using ESRI.ArcGIS.Geometry;14using ESRI.ArcGIS.Geodatabase;15using ESRI.ArcGIS.Carto;16using ESRI.ArcGIS.SOESupport;17using ESRI.ArcGIS.GeoAnalyst;18using ESRI.ArcGIS.DataSourcesRaster;192021//TODO: sign the project (project properties > signing tab > sign the assembly) 22// this is strongly suggested if the dll will be registered using regasm.exe .dll /codebase2324/doc/11b6d0640b1c59eef8c7b4a7.html25namespace Saturation26{27 [ComVisible(true)]28 [Guid("f8cb9f88-1dc9-4f34-a0a9-fa931afb8730")]29 [ClassInterface(ClassInterfaceType.None)]30public class Saturation : ServicedComponent, IServerObjectExtension, IObjectConstruct, IRESTRequestHandler31 {32private string soe_name;3334private IPropertySet configProps;35private IServerObjectHelper serverObjectHelper;36private ServerLogger logger;37private IRESTRequestHandler reqHandler;3839//Member variables40private string m_layerNameToAnalyst = null;41private IFeatureClass m_fcToAnalyst = null;//进⾏插值的要素类4243public Saturation()44 {45 soe_name = this.GetType().Name;46 logger = new ServerLogger();47 reqHandler = new SoeRestImpl(soe_name, CreateRestSchema()) as IRESTRequestHandler;48 }4950#region IServerObjectExtension Members5152public void Init(IServerObjectHelper pSOH)53 {54 serverObjectHelper = pSOH;55 }5657public void Shutdown()58 {59 logger.LogMessage(/doc/11b6d0640b1c59eef8c7b4a7.html Standard, "Shutdown", 8000, "Custom error message: Shutting down the SOE");60 soe_name = null;61 m_fcToAnalyst = null;62 serverObjectHelper = null;63 m_layerNameToAnalyst = null;64 logger = null;65 }6667#endregion6869#region IObjectConstruct Members7071public void Construct(IPropertySet props)72 {73 logger.LogMessage(ServerLogger.msgType.error, "Construct", 8000, "SOE Construct:start");74 configProps = props;75 m_layerNameToAnalyst = "testPoint";76//获得所要分析的FeatureClass77try78 {79 IMapServer3 mapServer = serverObjectHelper.ServerObject as IMapServer3;8081string mapName = mapServer.DefaultMapName;82 IMapLayerInfos layerInfos =mapServer.GetServerInfo(mapName).MapLayerInfos;83 IMapLayerInfo layerInfo = null;8485//获得所要分析图层的index86int c = layerInfos.Count;87int layerIndex = 0;88for (int i = 0; i < c; i++)89 {90 layerInfo = layerInfos.get_Element(i);91if (/doc/11b6d0640b1c59eef8c7b4a7.html == m_layerNameToAnalyst)92 {93 layerIndex = i;94break;95 }96 }9798//使⽤IMapServerDataAccess获取数据99 IMapServerDataAccess dataAccess = mapServer as IMapServerDataAccess;100 m_fcToAnalyst = dataAccess.GetDataSource(mapName, layerIndex) as IFeatureClass;101102if (m_fcToAnalyst == null)103 {104 logger.LogMessage(ServerLogger.msgType.error, "Construct", 8000, "SOE custom error: Layer name not found."); 105return;106 }107 }108catch (Exception es)109 {110 logger.LogMessage(ServerLogger.msgType.error, "Construct", 8000, "SOE custom error: Could not get the feature layer.");111 }112 }113114#endregion115116#region IRESTRequestHandler Members117118public string GetSchema()119 {120return reqHandler.GetSchema();121 }122123public byte[] HandleRESTRequest(string Capabilities, string resourceName, string operationName, string operationInput, string outputFormat, string requestProperties, out string responseProperties)124 {125return reqHandler.HandleRESTRequest(Capabilities, resourceName, operationName, operationInput, outputFormat, requestProperties, out responseProperties);126 }127128#endregion129130private RestResource CreateRestSchema()131 {132 RestResource rootRes = new RestResource(soe_name, false, RootResHandler);133134 RestOperation sampleOper = new RestOperation("sampleOperation", 135new string[] { "field" }, 136new string[] { "json" },137SaturationAnalystOpeartionHandler);138139 rootRes.operations.Add(sampleOper);140141return rootRes;142 }143144private byte[] RootResHandler(NameValueCollection boundVariables, string outputFormat, string requestProperties, out string responseProperties) 145 {146 responseProperties = null;147148 JsonObject result = new JsonObject();149//result.AddString("hello", "world");150151return Encoding.UTF8.GetBytes(result.ToJson());152 }153154private byte[]SaturationAnalystOpeartionHandler(NameValueCollection boundVariables,155 JsonObject operationInput,156string outputFormat,157string requestProperties, 158out string responseProperties) 159 {160 responseProperties = null;161//反序列化参数162string strField;163bool found = operationInput.TryGetString("field", out strField); 164if (!found || string.IsNullOrEmpty(strField)) 165throw new ArgumentNullException("field");166167byte[] result = SaturationAnalyst(strField);168169return result;170 }171172private byte[] SaturationAnalyst(string field)173 {174if (field.Length <= 0)175 {176throw new ArgumentOutOfRangeException("field");177 }178179//插值180 IRaster krigeRaster = BuildKrigeRaster(m_fcToAnalyst, field);181//重分类182 IRaster reclassRastr = BuildReclassRaster(krigeRaster, 4);183//栅格转⾯,字段名作为⽣成的要素名称184 IFeatureClass ConPolygon =RasterToPolygon(reclassRastr, field);185//将要素类序列化成json格式186 JsonObject resultJsonObject = FclassToJsonObj(ConPolygon);187188byte[] result =Encoding.UTF8.GetBytes(resultJsonObject.ToJson());189return result;190191 }192193#region Helper 函数194///195///克⾥⾦插值196///。

SOE介绍以及开发部署

SOE介绍以及开发部署

ArcGIS 10.1 for Server SOE介绍及开发Esri中国信息技术有限公司2012年6月《版权声明》本文档版权为Esri中国信息技术有限公司所有。

未经本公司书面许可,任何单位和个人不得以任何形式摘抄、复制本文档的部分或全部,并以任何形式传播。

——制定及修订记录——目录SOE介绍及开发 (1)第一章SOE由来 (1)第二章SOE使用 (3)1.1必选接口 (3)1.1.1IRESTRequestHandler 接口 (3)1.1.2IServerObjectExtension (4)1.2可选接口 (5)1.2.1IObjectConstruct (5)1.2.2IObjectActivate (5)1.3创建SOE (6)1.4部署SOE (11)1.5使用SOE (18)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等)以便调用这些应用程序。

ArcGIS 服务对象扩展(SOE)新手自学笔记(4):Schema、Resource、Operation

ArcGIS 服务对象扩展(SOE)新手自学笔记(4):Schema、Resource、Operation

前面几节我们介绍了SOE基本概念、REST SOE模板以及如何处理输入输出数据。

今天详细介绍一下SOE中三个重要概念:Schema、Resource、Operation。

1.SchemaSOE中的Resource和Operation所组成的结构就是Schema,也可以说Shcema 确定了SOE中Resource和Operation的层次结构。

通常由IRESTRequestHandler接口的GetSchema()方法来返回该SOE的Schema,作为一个JSON格式的字符串被返回。

在REST API中可以通过讲一个http请求的参数设置为“f=schema”来获取Schema。

下面我们来看几个Schema的例子Schema1 只有一个Operation{"operations" : [ "buffer", "near" ]}在该例子中,SOE之暴露了一个Operation,从REST API角度来讲,这个SOE之暴露了两个URL。

SOE跟资源和Buffer Operation:http://<service-url>/exts/<extensionName> //root SOE resourcehttp://<service-url>/exts/<extensionName>/buffer //buffer operation Schema2 有多个Operation{"operations" : [ "buffer", "near" ]}在该Schema中Operation是一个数组,所以可以指定多个操作。

从REST API角度来讲,这个SOE暴露了三个URL、SOE跟资源、Buffer 和near操做:http://<service-url>/exts/<extensionName> //root SOE resourcehttp://<service-url>/exts/<extensionName>/buffer //buffer operationhttp://<service-url>/exts/<extensionName>/near //near operationSchema3 具有参数的Operation和它指定的参数以及输出格式{"operations" : [{"name" : "buffer","parameters" : ["location", "distance"],"supportedOutputFormats" : ["json", "amf"]},{"name" : "near","parameters" : ["location", "distance", "lookingFor"],"supportedOutputFormats" : ["json"]}]}它同Schema2暴露的URL是一样的,区别在于它不仅制定了Operation的名称,还有一些Operation的附属信息,稍后我们会继续讨论这种Schema。

ArcGIS Server简介

ArcGIS Server简介

ArcGIS Server 10 数据管理

通过ArcCatalog 通过ArcGIS Service Manager
ArcGIS Server For Silverlight特点


通过插件实现,将胖客户端的某些特性重新 带给了用户,但是需要客户端安装插件,在 目前阶段,公网应用还不太合适,但适合 B/S架构应用系统开发(运行于一个专用网 络中,如城域网、小型局域网或VPN网络) SL和WPF一脉相承,可以有很好的用户体 验 利用REST可以提升执行效率
ArcGIS Server中 的GIS Server

SOM:服务器对象管理器,分配和路由请 求,提供动态负载务请求,可在一个SOC进程中运行 多个服务器对象
ArcGIS Server安 装选项


GIS Services:SOM、SOC、Server Manager程序,Web Services组件(For REST、SOAP) Web Application:ADF开发组件库 Web ADF Runtime:ADF组件运行时库 ArcObjects SDK:基于AO开发所需的库
ArcGIS Server For Silverlight安装



装VS2010 装Expression Blend 装其它一些SilverLight组件,如 ComponentOne 装ArcGIS Server For SiverLight 2.2
相关术语说明



ArcSDE:空间数据引擎,用于访问企业 GDB Geodatabase:空间数据库,包括 Enterprise GDB和Personal GDB ArcExplorer:地图浏览器 ArcPAD:掌上地图软件 ArcGIS Image Server:影像处理服务端 软件

SOE开发

SOE开发

SOE=SO+E
SOE溯源
• .NET • Java 9.2中首次推出, 9.3.1中引入了 在随后的9.3.1 SOE,实现了 中引入了SOAP DCOM架构的 SOAP接口。 (简单对象访 问协议)接口 10中可实现REST 架构下的SOE.
ArcGIS Server架构
特定服务中 »部署稍微显的麻烦 »只与一种Server Object类型或配置绑定
SOE详细介绍
可以扩展MapServer Object,从而建立自定 义的ArcGIS行为到Server Object中,而不必 在Web层建立调用AO代理的Java业务逻辑。 这样省去了跨进程调用的资源开销,提高 了效率。 SOE随着Server Object进程的创建而创建并 初始化,对于每个请求,都被重用。 只要Server Object进程存在,SOE进程也就 存在。可以缓存被不同请求重用的信息。
• Server Object Extension (SOE) 是能够封装业务逻辑(自定义渲染器,类扩展 等)的特殊扩展方法。 • 客户端利用和配置扩展的统一方式 • -优点 »扩展ArcGIS Server 现有服务的能力 »可调用ArcObjects高效封装业务逻辑 »可通过REST/SOAP/DCOM方式调用 »可通过属性页面进行配置 »可通过ArcGIS Server 的安全机制
SOE特性总结
SOE的本质是一个特殊的寄生服务器对 象(Server Object),与其宿主地图服 务共享服务器资源与访问方式。 大幅减少客户端与服务器端的细粒度跨 线程调用,将降低应用程序复杂度,明 确区分了提交请求与处理请求的分工。
• 处理SOE对象 1. 要自定义SOE,需要实现接口 com.esri.arcgis.server.IServerObjectExtension 2.这是所有SOE必须支持的强制接口,包含两 个方法:init() 和shutdown(). init() 方法只在SOE被创建时被调用一次 shutdown() 方法把Server Object上下文的关闭 消息通知SOE,只被调用一次 3.这个接口被Server Object用来管理SOE的生命 周期

ArcGIS Server 10 SOE开发初探-汪洋

ArcGIS Server 10 SOE开发初探-汪洋


SOE的初始化顺序
• •
总体上看,SOE的初始化方法按以 下顺序调用: ILogSupport.InitLogging > IServerObjectExtension.Init > IObjectConstruct.Construct > IObjectActivate.Activate (every time CreateServerContext is called) > IObjectActivate.Deactivate (every time ReleaseContext is called)

OMD图
-
File://ArcGIS_Home\DeveloperKit10.0\Diagrams

MSDN、CSDN、EDN...

ArcObjects Help
下一讲...
•Json对象序列化和反序列化 •SOE的优势和应用场景 •属性页的开发和部署 •客户端API的调用 •MSD服务支持
•...
Object),不其宿主地图服务共享服务器资源不访问 方式
2. SOE在Server Object被创建时被初始化,他的生命
周期和Server Object是相同的,丌需要手动实例化
3. SOE大幅减少客户端不服务器端的细粒度跨线程调用,
将降低应用程序复杂度,明确区分了提交请求和处理 请求的分工
获得帮助
IObjectConstruct接口

如果SOE包含配置信息或需要初始化操作 ,请实现IObjectConstruct接口。该接口 只包含一个Construct方法,该方法在 IServerObjectExtension.Init()乊后调用 ,并以属性集的方式返回配置信息。 丌要将初始化操作放在SOE的构造函数或 Init()方法中,将他们放到 IObjectConstruct.Construct()方法里, 该方法在SOE创建后调用。这样你可以在 创建一个完整的SOE并执行初始化操作的 同时记录所有错误日志。

ArcGIS服务对象扩展(SOE)新手自学笔记(1):初识SOE

ArcGIS服务对象扩展(SOE)新手自学笔记(1):初识SOE

ArcGIS服务对象扩展(SOE)新手自学笔记(1):初识SOE1.SOE介绍在ArcGIS 10.1中ArcGIS Server不在支持DCOM方式的连接,这也就意味着我们不能通过本地方式的连接使用ArcObjects提供的更多功能,所以我们推荐一种新的方式来实现这些功能,这种方式就是SOE服务器对象扩展。

SOE存在于整个服务对象的生存期内,可以利用服务对象的资源并对其进行扩展。

一个SOE通常在服务对象创建是初始化,并且在整个服务对象的生存期内只会被创建一次。

SOE支持SOAP和REST两种访问方式,其通过强大的AO来扩展服务对象,并可以运行在一个没有AO的客户端中。

SOE特别适用于那些使用ArcGIS APIs无法完成的复杂业务逻辑功能。

SOE可以提供粗粒度的接口,一次完成复杂的工作,而不是向服务器端发送大量的请求。

目前大多数Gis公司都有管网项目,而ArcGIS APIs并没有为我们提供几何网络的有关内容,工程师们大多数通过利用AE在后台完成分析操作,然后返回json格式数据。

这样每个公司可能会有一套自己的函数库用来完成以上问题,SOE的出现刚好可以用来提供统一的方法来解决这个问题,且其执行速度很快。

SOE比较适合那些有多种平台工作经验的开发者,开发一个SOE 通常会用到AO、.NET 或Java、REST或SOAP Web服务通信技术。

2.重要接口首先我们来介绍几个必要的接口(REST方式):IServerObjectExtension、IObjectConstruct(可选)、IRESTQuestHandlerIServerObjectExtension接口主要由两个方法:Init---该函数有一个IServerObjectHelper类型的参数。

该函数在服务启动时被调用,并将IServerObjectHelper对象传入,此接口是对Server 对象弱引用,可以通过其ServerObject属性得到Server对象。

ArcGIS+Server

ArcGIS+Server

14429398体系结构ArcGIS Server是一个发布企业级GIS应用程序的综合平台,提供了创建和配置GIS应用程序和服务的框架,可以满足各种客户端的各种需求,这是对ArcGIS Server一个抽象的描述,那么ArcGIS Server在GIS应用中具体扮演什么样的角色呢?使用过ArcGIS 桌面应用软件的人知道,在桌面环境中存在各种GIS工具可以供使用,如展现GIS数据可以用ArcMap、ArcGlobe,根据位置寻址可以使用address locator,对数据进行分析操作可使用ArcToolbox的Geoprocessing工具,这些包含了不同级别的GIS功能,从底层来看,都是通过ArcObjects来实现这些的。

站在ArcGIS Server的角度上,我们不再考虑要处理的数据是ArcMap的mxd文档、ArcGlobe的3dd文档、还是address locators等,相应地,我们用服务的概念来对它们进行描述,这些服务可以是map services、globe services、geocode services,GIS资源依托这些服务存在,当需要在GIS Server上共享一个地图时,就使用该地图的mxd来定义一个Map Service。

可以看出,ArcGIS Server的目的就是宿主各种服务,并为客户端应用提供这些服务资源,另外,ArcGIS Server提供了一个管理程序来对服务进行控制与管理。

ArcGIS Server体系结构可以用下图来描述:GIS Server宿主各种GIS资源,例如maps、globes、address locators,并将它们封装为服务提供给客户端应用。

GIS Server本身包括两部分:Server Ojbect Manager(SOM)和Server Object Containers(SOCs)。

通过命名可以看出,是一个SOM和一个或多个SOC,客户端发送请求到SOM,SOM将分配的资源提供给客户端,通过SOM对SOC进行调度与管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SOE
优势一
运行速度快 SOE的初始化过程,只在Server Object产生时发生,且 只发生一次,效率变高;
SOE
优势二
细粒度 方便移植已有的AO代码
SOE
优势三
SOE在Server Context中执行,避免了跨线程、跨服 务器的调用; SOE将存在于server object的整个周期之内,因此可 以共享server object中的cache等资源; 可以利用SOC进程 (生命周期通知,日志记录,访问 和操作);
SOE生命周期
MapServer初始化 SOE初始化 MapServer启动 SOE 构造 SOE 活动 REST/SOAP处理请求 SOE 停止活动 MapServer停止 SOE 关闭 IServerObjectExtension 必须 必须实现 实现 必须实现的方法:Init 和 Shutdown。 即SOE对象初始化和释放时的操作定义。 IObjectConstruct 可选 可选实现 实现 如果你的SOE里包含复杂的配置属 IObjectActivate,可选实现 性或者初始化逻辑,则可以实现该接口 IObjectActivate 客户端每次发起请求和结束请求时的操 IRESTRequestHandler 接口 。它在init结 中包含了一个方法Construct Deactivate() 方法,请求处理结束; 作,则可以实现 IObjectActivate接口。其 束后运行。 以REST的方式处理请求; 中包含两个方法Activate 和 Deactivate. IServerObjectExtension IRequestHandler2接口 Shutdown() 方法; 以处理 SOAP请求;
ESRI.ArcGIS.SOESupport库
ServerLogger AutoTimer JsonObject Conversion
输出方法
SOE不仅能输出JSON对象,也可以输出HTTP标准( MIME)类型,如图片、文本、二进制流等。
代码演示
利用模板创建SOE
10的代码迁移
/en/help/main/10.1/index.html#/Alt ernatives_to_server_object_extensions/015400000528000000/
ArcGIS 服务端的功能扩展方式
ArcGIS Server Map Server
ArcGIS 10.1 for Server SOE 应用开发
Esri中国信息技术有限公司上海分公司
内容概要
1. 2. 3. 4. 5. 6. 7. 什么是SOE SOE应用场景 开发方法 安全与管理 部署与调试 客户端的使用 总结
什么是SOE?
SOE定义
SOE:Server Object Extension SO: Server Object是粗粒度的AO组 件,是一个可以执行特定操作的 高级对象。 SOE与SO共享生命周期
客户端的使用
SOE访问客户端
REST SOE
SOAP SOE
Flex
JavaScript
Silverlight
ArcGIS Explorer Desktop
iOS
Android
Windows phone
Web Service应用程序
ArcGIS Resources 示例
Flex调用方法
扩展BaseTask HTTPService
What’s new in 10.1?
1. 2. 3. 4. 5. 6. 7. SOE的模板已更新。因为新的SOE不再是扩展servicedComponent。 .soe文件一步部署成功。 SOE编译时一定要兼容64位操作系统 在server manager中,可以浏览到所有可用的SOE情况。 针对JAVA SOE,在manger里面可以设置服务启动延迟,帮助程序员 调试SOE 创建和设计属性页面将更方便。 SOE的属性配置都是动态的。
SOE类扩展
.Net/Java
GP Server
Model Builder GP Tools ArcPy ArcObjects类扩展 Python .Net/Java
Web Service
Arc Engine
.Net/Java
对比SOE 与 GP Service
与SOC资源共享 可配置属性 运行速度快 支持AO细粒度 支持异步处理 无属性配置 初始化过程耗时 多种开发方式
JSONUtil FeatureSet.convertFromJSON(json:stirng);
总结
ArcGIS Server 10.1 SOE
管理 界面
64位
强大的功能
部署 自动生 成属性 界面 方便
帮助信息的获取
/en/help/main/10.1/index.html#/What_is_a_server_object_extension/ 0154000004s5000000/
代码迁移参考
安全与管理
Property的设定
SOE能力管理
Root Resource Child Resource 1 Child Resource 2 Child Resource 3 Child’s child Resource 1 Operation 1 Operation 2 Capability A Operation 3
Server Object
ExtensionFra bibliotek 实现方式调用形式
作为Map Server 的功能扩展,发布为REST或SOAP接口。
SOE
SOE逻辑层次
SOE不仅是方法的集合,更是资源的集合!
Root Resource Child Resource 1 Child Resource 2 Child Resource 3 Child’s child Resource 1 Operation 1 Operation 2 Operation 3
SOE应用场景
ArcGIS Server的连接方式
ArcGIS Server 10.1
本地连接Server的替代方法
排版与打印 Arcpy.mapping 、Printing Tool 符号与渲染的修改 动态地图 要素编辑 Feature Service 空间处理、空间操作的实现 空间处理、空间操作的 实现SOE \GP
Capability B
用户信息的获取
利用用户信息,可以对每个用户的操作进行限制。
参考原文
IServerEnvironment3 senv = GetServerEnvironment()as IServerEnvironment3; IServerUserInfo suinfo = erInfo; String UserName = ; IEnumBSTR roles = suinfo.Roles;
参考原文
开发过程
SOE .Net开发的相关技术
.NET COM REST or SOAP 通信 ArcObjects pagesHTML、JavaScript
.Net下的开发环境
ArcObject SDK Visual Studio .Net Framework 3.5 利用模板REST
SOE
优势四
支持属性设置及界面设计 对于简单接口,可自动生成属性页面
局限
同步调用,不支持异步处理 目前只能挂接与Map Server之上
SOE
适用场景
GP Service比较难完成的事情: 没有现成的toolbox可以利用; ArcPy未覆盖(如三维数据的处理) 与服务的数据资源关联紧密 要求执行迅速
1、首先注销原来的soe regasm <path to DLL> /codebase /u. 2、在 vs2010里面,创建模板。 3、检查 reference。 4、编译项兼容64位。 5、新增了 ServerObjectExtension属性 [ServerObjectExtension("MapServer", AllCapabilities = "GetCommonInfo;GetSecretInfo", DefaultCapabilities = "GetCommonInfo", Description = "An example SOE for the help system", DisplayName = "My Sample SOE", Properties = "PropertyA=500;PropertyB=Cities", SupportsREST = true, SupportsSOAP = false)] 6、 代码其他部分不变,只是SOE不再继承ServicedComponent,要删除。 7、在 ArcGIS Server 10. 1的 SOE不再直接访问 mxd。使用有一些类要避免使用了。比如Carto库中的 IMap, Ilayer等 .相应的,请使用如下的类,如MapServer, MapLayerInfos, IMapServerDataAccess 、 MapDescription.
部署与调试
轻松部署
1. 2. 3. 4. 编译得到*.soe文件 到ArcGIS Manager 的站点中注册soe 编辑Map Server 的capabilities 调用!
调试
IRESTRequestHandler或 IRequestHandler2的函数调试,使用 visual studio中的“附加到 进程”至 ArcSOC.exe即可; .Net开发中,如要调试IServerObjectExtension或 IObjectConstruct接口中的函数,可以 在 Init()方法中加入 unch(); Java开发,如要调试 IServerObjectExtension或 IObjectConstruct接口中的函数,则可以 利用启用“延迟启动”;
相关文档
最新文档