关于在客户端中使用REST SOE
一旦你在Manager中部署了你的REST SOE,并且早某个服务中起用了它,那么你就可以在客户端程序中使用它了。因为SOE的本质是一个Web服务,它接受一些简单类型的变量作为参数,比如string、double等等。最复杂的可能是向你的SOE中提交表示一系列geometry顶点的JSON数据。
在服务目录中测试SOE
由于你向Web服务中提交的都是简单数据类型的数据,所以可以在服务目录中测试你的SOE。在你的地图服务中启用了SOE之后,在服务目录中导航到地图服务页面。在页面的最底部,你将会看到所支持的扩展的SOE。(如果你没有看到,你需要核查ArcGIS Server管理员是否清除了REST缓存。)
如果你在服务目录中单击了SOE,你就可以单击并浏览你的SOE所暴露出的资源以及操作。单击某个操作,你将看到一些输入框,你可以在其中输入值已测试SOE的请求和响应是否正常。如果SOE运行正常的话,你应该会看到JSON的输出结果或者是HTML响应。
编写使用REST SOE的客户端程序
无论你使用哪种客户端API,使用SOE Web服务需要满足以下条件:
对Web服务发送请求——这包括构建参数列表并向服务器发送完整的Url
对响应结果进行处理——需要知道响应结果的数据格式并能够在程序中知道如何正确解析出有用的信息
ArcGIS API for JavaScript中使用REST SOE
如果你在用ArcGIS API for JavaScript开发客户端程序,你可以使用esri.request()方法发送Web服务请求。你首先构造一个JSON对象,该对象包含了请求所需要的所有的参数信息,然后你需要传递content对象给esri.request并定义SOE的Url和回调函数。结果是一个简单的JavaScript对象。
[JavaScript]
var soeURL = "http://myServer/ArcGIS/rest/services/Yellowstone/MapServer/exts/SpatialQuerySOEREST/SpatialQuery"; . . . var content = { 'location': "{x:" + point.x + ",y:" + point.y + "}", 'distance': distanceNumber, 'f': "json" }; // Do the SOE query. esri.request({ url: soeURL, content: content, callbackParamName: "callback", load: function (response){ drawResponseGeometries(response.geometries); responseRecordsToGrid (response.records); } , error: function(error){ console.log(error); } } ); . . .
一旦content就绪,就可以通过esri.request()对SOE发送请求了。需要注意的是该请求需要使用SOE REST方式的Url。
当然,你也必须定义一个回调函数并决定如何使用返回结果。上面这个SOE返回了包含如下内容的JSON对象:
Geometries
Records
在回调函数中(此处并没编写)可以将geometries以graphics的形式显示在地图上,将records以记录的形式显示在表格中。
在ArcGIS API for Flex中使用REST SOE
在ArcGIS API for Flex中,你可以通过扩展BaseTask类使用你的SOE。BaseTask中的Url属性就是你的SOE的Url。你可以使用BaseTask的sendURLVariables方法向Web服务发送请求。返回结果是Flex对象,你可以从中获取不同的JSON对象。
在ArcGIS API for Silverlight中使用REST SOE
在ArcGIS API for Silverlight中,你可以使用标准的Silverlight代码发送Web服务并处理JSON响应结果,这样就可以使用SOE了。这些细节可以参考微软的帮助文档:
How to: Make Requests to HTTP-Based Services(帮助你向SOE发送请求)
Working with JSON Data (帮助你处理响应结果)
你可以根据兴趣查看 JavaScript, Flex 和 Silverlight APIs中的帮助文档,里面包含了对于特定API使用SOE的细节信息。