ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下.doc

上传人:夏** 文档编号:559696902 上传时间:2022-12-23 格式:DOC 页数:9 大小:548.51KB
返回 下载 相关 举报
ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下.doc_第1页
第1页 / 共9页
ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下.doc_第2页
第2页 / 共9页
ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下.doc_第3页
第3页 / 共9页
ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下.doc_第4页
第4页 / 共9页
ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下.doc》由会员分享,可在线阅读,更多相关《ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下.doc(9页珍藏版)》请在金锄头文库上搜索。

1、1.REST SOE当客户端使用REST方式发送SOE请求时,实际上是利用HTTP协议发送了一个请求字符串,ArcServer获得该字符串后会将其解析成一系列命令执行,并返回JSON数据。返回的JSON格式数据如下:2.创建REST SOE(1)提醒为了确保你创建的REST SOE能够成功执行,你需要仔细考虑一下向服务器端发送请求的数据类型和你希望返回的数据。一个REST SOE通常包含资源和操作两部分(Resource和Operation):Resource-可以从服务器端获取的一系列信息。它类似于类中暴露出的某一个属性;Operation-服务器端根据发送的请求进行一系列的操作。在Oper

2、ation执行完后,你可以获得文本、图片或其他类型的数据。可以将Operation看做类中的一个方法。在为自己的REST SOE编写代码之前,我们需要明确他所需要的Resource和Operation。http:/ 有必要画出一个图表,并标记出它们的输入输出参数,REST SOE可以包含多个资源和操作,作为初学者最好制定一个操作。(2)REST SOE模板现在我们创建一个完整的SOE,在VS2010中新建一个项目,选择Server Object Extention,并在右边选择REST 模板,如下图:需要注意一般情况下,Vs2010会默认.NET4.0环境,这时候你看不到右边的模板,你只需选择

3、.NET3.5即可。点击确定创建模板后,Vs会为我们自动生成一系列代码,下面我们简要介绍一下该模板:SOE的真身其实就是一个COM组件,每个Com组件都会有一个GUID作为标识。我们的SOE模板中实现了一系列的类和接口,我们来认识一下这些类和接口:ServicedComponent-SOE的基类,不需要对他做任何事;IServerObjectExtension-包含Init和ShutDown两个函数用来启动和停止SOE;IObjectConstruct-只有一个Construct方法,只在SOE启动时运行一次,用来放置一些不需要在每次请求都运行的逻辑;IRESTQuestHandler-使用R

4、EST SOE必要的接口,用来获取请求并返回处理结果。他的方法主要用来创建Schema和处理Requests。http:/ 在该模板的构造函数中,你会看到如下代码:SoeRestImpl类主要由以下作用:*验证SOE的Schema*验证HandlerRESTRequest请求的resourceName和OperationName*验证SOE的Capabilities*记录服务请求和返回*处理错误SoeRestImpl类实现了IRESTRequestHandler接口。通常情况下SOE工程中都会有一个该类的实例和一个IRESTRequestHandler接口的引用。1、CreateRESTSch

5、ema()和Handle functionCreateRESTSchema函数中定义了在你的SOE中可以获取的Resource和Operation,每一个Resource和Operation都与一个处理函数(handle function)相关联。该处理函数用来在Resource或Operation被触发时,描述所要进行的处理操作。这里面就是你需要编写大量AO代码的地方。在REST SOE模板中,有一个处理resource逻辑的RootRESTHandler函数,他返回一个简单的JSON格式的字符串一个resource的handler function实际上是一个在SOESupport类库中的

6、代理(delegate),这意味着所有的resource的处理函数都有一个类似的函数签名。在REST SOE模板中包含了一个Operation的handler function。在此例中,该函数反序列化了两个字符串参数param1和param2,并且把它们作为JSON格式对象返回给客户端。同resource的处理函数一样,Operation的处理函数也是一个代理。该方法中出了一个OperationInput参数外,与resource处理函数一样。operationInput中包含了该operation中需要的参数。比如当你想要实现缓冲区查询时,该对象会包含一个point和distance参数。

7、在该函数中另一个需要关心的问题是,如何反序列化输入的JSONObject和将得到的结果序列化成客户端能接受的JSON数据。反序列化和序列化JSONObject有时是个很棘手的问题。(稍后介绍)有时候我们需要向客户端返回一些非JSON数据,比如图片。我们可以通过改变HTTP协议的Content-Type属性实现(1)我们要在实例化RESTOperation时设置它的SupportFormat参数(2)在handler function中设置responseProperties参数2.处理JSONObject大多数情况下,客户端和服务器都是通过JSON格式数据进行REST通信。所以,你的handl

8、er function必须能够反序列化JSON数据,提取其中有效值进行业务处理,在处理执行完毕后将结果序列化成JSON数据。反序列化JsonObject:问题在于AO中无法直接利用JSON数据,幸好ESRI为我们提供了SOESupport类库,该库中提供了一系列的方法来解决这个问题。当客户端发送请求时,JSON数据被作为一个SOESupport.JsonObject的实例传入到handler function中,处理完后将结果作为JsonObject返回给客户端。在上面函数中包含一个JsonObject类型的参数operationInput,它包含了我们需要的参数。上面代码中使用TryGetS

9、tring方法将param1转换为string类型。在JsonObject中还包含以下方法:使用“TryGet”方法我们能够提取Json类型的参数值,并将其转化成你所定义的变量。可以用这些变量来定义你的AO类型数据。如果我们需要将JSON数据反序列化成geometries类型数据,SOESupport类库中为我们提供了SOESupport.Conversion.ToGeometry方法,该方法需要一个JsonObject类型或者string作为输入参数,并返回一个IGeometry类型变量。如下代码将一个JsonObject转换为IPoint:强调一下,上述代码中的错误检查是必须的,如果Jso

10、n数据无法构成IPoint类型,会抛出一个异常。比如x:-123, y:47这个Json格式数据可以成功转换为IPoint,而x:-123则会抛出一个异常。序列化JsonObject:当我们的业务逻辑被执行完后,我们需要将结果序列化成JsonObject类型,并返回给客户端。这里我们依旧可以使用JsonOject类,看以下代码:上述代码中,如果parm1Value的值为“myFirstParameter”,该函数执行后得到的Json格式对象为“param1: myFirstParameter”。该类中还有以下方法来构造json数据:有的Geometry对像由于含有子对象或数组,序列化为Json数据时比较棘手,这时我们可以使用SOESupport.Conversion.ToJsonObject方法,该函数接受一个实现了IGeometry类型的对象,并将其序列化为Json对象。如下代码:执行后所构成如下Json数据:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号