欢迎来到天天文库
浏览记录
ID:1471989
大小:548.50 KB
页数:9页
时间:2017-11-11
《arcgis 服务对象扩展(soe)新手自学笔记(3):rest soe模板下》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.RESTSOE 当客户端使用REST方式发送SOE请求时,实际上是利用HTTP协议发送了一个请求字符串,ArcServer获得该字符串后会将其解析成一系列命令执行,并返回JSON数据。 返回的JSON格式数据如下: 2.创建RESTSOE (1)提醒 为了确保你创建的RESTSOE能够成功执行,你需要仔细考虑一下向服务器端发送请求的数据类型和你希望返回的数据。 一个RESTSOE通常包含资源和操作两部分(Resource和Operation): Resource---可以从服务器端
2、获取的一系列信息。它类似于类中暴露出的某一个属性; Operation---服务器端根据发送的请求进行一系列的操作。在Operation执行完后,你可以获得文本、图片或其他类型的数据。可以将Operation看做类中的一个方法。 在为自己的RESTSOE编写代码之前,我们需要明确他所需要的Resource和Operation。http://ming.ttplay8.cn有必要画出一个图表,并标记出它们的输入输出参数,RESTSOE可以包含多个资源和操作,作为初学者最好制定一个操作。 (2)RES
3、TSOE模板 现在我们创建一个完整的SOE,在VS2010中新建一个项目,选择ServerObjectExtention,并在右边选择REST模板,如下图: 需要注意一般情况下,Vs2010会默认.NET4.0环境,这时候你看不到右边的模板,你只需选择.NET3.5即可。 点击确定创建模板后,Vs会为我们自动生成一系列代码,下面我们简要介绍一下该模板: SOE的真身其实就是一个COM组件,每个Com组件都会有一个GUID作为标识。 我们的SOE模板中实现了一系列的类和接口,我们来认识一下这些
4、类和接口: ServicedComponent---SOE的基类,不需要对他做任何事; IServerObjectExtension---包含Init和ShutDown两个函数用来启动和停止SOE; IObjectConstruct---只有一个Construct方法,只在SOE启动时运行一次,用来放置一些不需要在每次请求都运行的逻辑; IRESTQuestHandler---使用RESTSOE必要的接口,用来获取请求并返回处理结果。他的方法主要用来创建Schema和处理Requests。 http:
5、//tuan.qqq23.com 在该模板的构造函数中,你会看到如下代码: SoeRestImpl类主要由以下作用: *验证SOE的Schema *验证HandlerRESTRequest请求的resourceName和OperationName *验证SOE的Capabilities *记录服务请求和返回 *处理错误 SoeRestImpl类实现了IRESTRequestHandler接口。通常情况下SOE工程中都会有一个该类的实例和一个IRESTRequestHandler接口的引用。1、
6、CreateRESTSchema()和Handlefunction CreateRESTSchema函数中定义了在你的SOE中可以获取的Resource和Operation,每一个Resource和Operation都与一个处理函数(handlefunction)相关联。该处理函数用来在Resource或Operation被触发时,描述所要进行的处理操作。这里面就是你需要编写大量AO代码的地方。 在RESTSOE模板中,有一个处理resource逻辑的RootRESTHandler函数,他返回一个简单的J
7、SON格式的字符串 一个resource的handlerfunction实际上是一个在SOESupport类库中的代理(delegate),这意味着所有的resource的处理函数都有一个类似的函数签名。 在RESTSOE模板中包含了一个Operation的handlerfunction。在此例中,该函数反序列化了两个字符串参数‘param1’和‘param2’,并且把它们作为JSON格式对象返回给客户端。 同resource的处理函数一样,Operation的处理函数也是一个代理。该方法中出了一个O
8、perationInput参数外,与resource处理函数一样。operationInput中包含了该operation中需要的参数。比如当你想要实现缓冲区查询时,该对象会包含一个point和distance参数。 在该函数中另一个需要关心的问题是,如何反序列化输入的JSONObject和将得到的结果序列化成客户端能接受的JSON数据。反序列化和序列化JSONObject有时是个很棘手的问题。(
此文档下载收益归作者所有