SOE编程:REST模板解析
使用工具:Visual Studio 2010
目标框架:.NET Framework 3.5
新建项目 -> ArcGIS -> Server Object Extensions -> REST Template
以下为REST模板的内容解析:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.Collections.Specialized;using System.Runtime.InteropServices;using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.SOESupport;//TODO: sign the project (project properties > signing tab > sign the assembly)
// this is strongly suggested if the dll will be registered using regasm.exe <your>.dll /codebasenamespace RestSOE1
{[ComVisible(true)][Guid("f732b972-fd0b-4417-a39d-f72d3e21063b")][ClassInterface(ClassInterfaceType.None)][ServerObjectExtension("MapServer",AllCapabilities = "",DefaultCapabilities = "",Description = "Insert SOE Description here",DisplayName = "RestSOE1",Properties = "",SupportsREST = true,SupportsSOAP = false)]public class RestSOE1 : IServerObjectExtension, IObjectConstruct, IRESTRequestHandler{private string soe_name;private IPropertySet configProps;private IServerObjectHelper serverObjectHelper;private ServerLogger logger;private IRESTRequestHandler reqHandler;public RestSOE1(){soe_name = this.GetType().Name;// ServerLogger():日志记录对象,对SOE进行信息记录,可通过Manager的日志查看logger = new ServerLogger();reqHandler = new SoeRestImpl(soe_name, CreateRestSchema()) as IRESTRequestHandler;}#region IServerObjectExtension Members//SOE初始化public void Init(IServerObjectHelper pSOH){//生命周期开始时调试System.Diagnostics.Debugger.Launch();serverObjectHelper = pSOH;}/// <summary>/// 在服务器关闭时调用,可在该方法中释放SOE中使用的资源/// </summary>public void Shutdown(){}#endregion#region IObjectConstruct Members// 该方法在Init方法执行后立即被执行,如果SOE有配置属性,就可以通过该方法的参数得到// 只调用一次,可将SOE中比较耗费资源的逻辑写在该方法中public void Construct(IPropertySet props){configProps = props;}#endregion#region IRESTRequestHandler Memberspublic string GetSchema(){// 以JSON格式返回SOE资源return reqHandler.GetSchema();}public byte[] HandleRESTRequest(string Capabilities, string resourceName, string operationName, string operationInput, string outputFormat, string requestProperties, out string responseProperties){// operationName:操作名称// 若operationName参数为空字符串,则作用为获取资源在实例级别的描述// 若operationName参数不为空字符串,则作用为回调资源和操作的方法// Capabilities:一组资源授权的操作,可以为空字符串// resourceName:资源名称,空字符串表示根级别,子资源通过'/'表示// operationInput:操作的参数,JSON格式// outputFormat:客户端请求的输出格式,如JSON、AMF等// responseProperties:通过操作返回一组键值对,逗号分开return reqHandler.HandleRESTRequest(Capabilities, resourceName, operationName, operationInput, outputFormat, requestProperties, out responseProperties);}#endregion// 创建了REST资源和REST资源操作private RestResource CreateRestSchema(){RestResource rootRes = new RestResource(soe_name, false, RootResHandler);// RestOperation类,对应了一个SOE操作// 对应参数含义为:操作名称,参数,支持的格式,该操作的处理函数RestOperation sampleOper = new RestOperation("sampleOperation",new string[] { "parm1", "parm2" },new string[] { "json" },SampleOperHandler);rootRes.operations.Add(sampleOper);return rootRes;}// 处理资源方法private byte[] RootResHandler(NameValueCollection boundVariables, string outputFormat, string requestProperties, out string responseProperties){responseProperties = null;JsonObject result = new JsonObject();result.AddString("hello", "world");return Encoding.UTF8.GetBytes(result.ToJson());}// 资源操作方法// 操作的handler是整个SOE的核心部分private byte[] SampleOperHandler(NameValueCollection boundVariables,JsonObject operationInput,string outputFormat,string requestProperties,out string responseProperties){responseProperties = null;string parm1Value;bool found = operationInput.TryGetString("parm1", out parm1Value);if (!found || string.IsNullOrEmpty(parm1Value))throw new ArgumentNullException("parm1");string parm2Value;found = operationInput.TryGetString("parm2", out parm2Value);if (!found || string.IsNullOrEmpty(parm2Value))throw new ArgumentNullException("parm2");JsonObject result = new JsonObject();result.AddString("parm1", parm1Value);result.AddString("parm2", parm2Value);return Encoding.UTF8.GetBytes(result.ToJson());}/* SOE里面的很大一部分代码是和AO对象打交道* 而这部分也是核心功能* 当使用Esri提供给的SOE模板之后* 要核心要做的就是写SOE请求函数* 在这个请求函数也就是handler中* 核心AO代码就在这里 *//* 其实如果在ArcGIS Engine中做过和线性参考相关的工作* 那么这端代码是完全可以在ArcGIS Engine中使用的* 所以说SOE的开发并不是想象中的困难,相反如果有了AO基础的话* 的确是很简单 */}
}
内容可参照:https://wenku.baidu.com/view/d7b4134658f5f61fb73666e5.html
SOE编程:REST模板解析相关推荐
- sdcms的模板解析引擎,一个非常简单和实用的CMS
代码 <% '============================== 'SDCMS模板解析引擎 'Author:IT平民 'Date:2009年4-5月 '================ ...
- vmwear导出OVF模板解析(解决ovf导入服务器失败问题,虚拟机版本等)
vmwear导出OVF模板解析(解决ovf导入服务器失败问题,虚拟机版本等) 参考文章: (1)vmwear导出OVF模板解析(解决ovf导入服务器失败问题,虚拟机版本等) (2)https://ww ...
- php 模板解析,关于模板的原理和解析
PHP – 关于模板的原理和解析 将PHP代码和静态HTML代码进行分离,使代码的可读性和维护性得到显著提高. 使用模板引擎: 我们所说的模板是web模板,是主要由HTML标记组成的语言来编写的语言, ...
- 第五章:【UCHome二次开发】模板解析
UCHome模板文件位于/template文件夹下,每个模板文件单独一个文件夹,默认模板文件夹为default. 1.模板的使用配置 在根目录下的config.php中进行配 $_SC['templa ...
- 中国大学 MOOC C语言程序设计----编程部分答案解析
C语言程序设计----编程部分答案解析 编程题目1 1.求解矩形的面积.(10分) 题目内容:编写一个程序,从键盘读入一个矩形的两个边的值(整数),输出矩形面积. 输入样例:3,5 输出样例:15 时 ...
- Python GUI编程之视频解析软件制作
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 ( 想要学习Python?Python学习交流群:1039649593,满足你的需 ...
- ECMALL模板解析机制
ECMall模板解析语法与机制 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词就是标签名.在标签单元 ...
- Python编程--使用PyPDF解析PDF文件中的元数据
Python编程–使用PyPDF解析PDF文件中的元数据 元数据 作为一种文件里非常明显可见的对象,元数据可以存在于文档.电子表格.图片.音频和视频文件中.创建这些文件的应用程序可能会把文档的作者.创 ...
- 模板解析-mustache分析
文章目录 前言 一.什么是模板引擎 历史上曾经出现的数据变为视图的方法 二.mustache的基本使用 1.引入库 2.循环对象数组 3.不循环 4.循环简单对象 三.mustache的底层核心机理 ...
- 自定义php模板解析,迅睿CMS 自定义模板解析标签
需要精通php的开发者使用 系统自带的标签有 {category **** } 获取栏目 {/category} {linkage ****} 获取联动菜单 {/linkage} {page ** ...
最新文章
- CentOS6.5-源码编译安装最新MySQL5.7.10
- threejs添加立方体_前端图形学(三十)——从源码去看threejs中的光照模型
- 北京/上海内推 | 字节跳动AI Lab招聘NLP算法模型优化方向实习生
- [css] 说说响应式设计(responsive design)和自适应设计(adaptive design)的区别?
- C# WebRequest.Create 锚点“#”字符问题
- WAV文件格式终极解析
- arm 添加 samb 文件共享
- Java方法调用和参数传递
- vivo S12 PRO怎么解锁vivoS12解锁平台刷机教程屏幕锁激活手机锁不记得了可以用这个方法教程刷机解锁用的
- zemax双胶合消色差透镜设计
- 外行人都能看得懂的机器学习,错过了血亏!
- x99对应服务器芯片,x99主板配什么cpu 几款x99主板介绍【详细介绍】
- 【概念学习】联邦学习的三个类别+【论文阅读】异步联邦学习
- 用U盘安装ubuntu系统
- Google开放星空观测应用SkyMap源代码
- 记录一次Golang逃逸分析
- 一步步教你创建自己的数字货币(代币)进行ICO
- 计算机丢失CH375DLL怎么办,CH375DLL.DLL
- 美国电视剧特色介绍与分析
- Linux/centOS安装lftp