ArcGIS Server Inside 系列(一)——Server概览
rcGIS Server Inside TM 一
——Server概览
在这个系列中,我将会为各位提供一系列博文,该系列博文将专注于ArcGIS Server技术核心。希望各位多提宝贵意见。
纵观当今GIS技术发展热潮,服务式GIS与3D GIS无疑是当今最为广大用户群体推崇的技术。从目前市场上各大主流GIS厂商的产品体系中可以看出,每个厂商都在这两个方向使足了劲,新产品的宣传也着力倾向这两个方面。其实,服务式技术本身我们早已接触,例如我们平时使用的水、电、气,这些都是通过“服务”的方式为城市里每个人服务的,正是这种“服务”方式使得我们可以很简单的就能使用它们,只需要我们家里安装一些管线和设备,就能实现水、电、气的接入。使用服务最主要的就是需要遵循“服务接口”,在它们的使用当中,我们家里安装的设备都是遵循这些“服务接口”的。
将生活中的这种经验照搬到IT架构上来,便诞生了SOA架构,即面向服务的架构。由平台软件提供基础服务(如GIS中的地图浏览服务、地图查询服务、空间操作服务等),客户端只需要遵循它的标准,按照“服务接口”的契约去使用服务即可。如果世界上只有一家公司提供这种服务,大家都遵守它提供的“服务接口”或者叫服务契约将不会有任何问题。问题是各个厂商都研发自己的平台,发布独立的服务,这可就给客户端造成了极大的麻烦。
举个例子来说,如果某个城市有两家电力公司A和B,A给用户提供的是220v的电压,B给用户提供的是380v的电压,如果客户想要同时接入这两家公司的电力网络,那么客户接入线必须使用两套电缆线,并且需要安装变压器。试想一下,这是多么麻烦的事情。所以,SOA架构需要解决的首要问题就是服务的标准,各大IT厂商都遵循该标准就能实现异构平台的相互通讯,如基于j2ee开发的系统可以无缝与.net企业级应用程序通信。我想这可能是SOAP协议(基于XML消息)提出个根本原因。在详细分析SOA架构之前,我们先看看SOA架构的系统组成。
实现SOA架构最主要的技术之一就是WebService技术,SOA架构主要由服务提供者(平台服务提供方,如ArcGIS Server)和服务消费者(平台服务使用方,如ADF Web Application)组成。服务提供方主要提供各种服务,如ArcGIS Server提供的MapServer、GeoprocessiongServer、GeometryServer、GeodataServer等等,这些服务都被称为服务器对象,当ArcGIS Server服务管理器进程启动时(一个ArcSOM.exe的进程),它会根据各种服务的配置文件创建一个或者多个服务器对象实例(其实就是由SOM管理器在SOC机器中创建了一个或者多个对象,这些对象实例是运行在SOC的机器上的),每个服务实例都暴露了一系列的方法,如MapServer的ExportMapImage、ComputeDistance、QueryFeatureData等方法。详细方法请参考ArcObjects的IMapServer接口。当然,在这里,我们把MapServer的ExportMapImage方法就定义为服务,客户端可以请求这个服务,获得地图图片。多次地图图片的请求和客户端绘制就构成了客户端丰富、平滑地图浏览体验。当然,使用缓存地图服务能够带来更好的用户体验,后面我会详细阐述。
获得一个基于Web Service的服务契约非常简单,只需要在服务的地址上加上?wsdl后缀即可。例如我们可以通过如下方式访问ArcGIS Server 发布的一个名叫arcgis的MapServer。http://zxb-esri:8399/arcgis/services/arcgis/MapServer?wsdl
知道一个服务的wsdl,我们就很容易获得WebService的本地代理,例如在.NET中添加Web引用就可以创建本地代理对象,本地代理对象提供了直接访问服务器对象方法的技术,客户端程序使用本地代理对象和使用其他对象没有任何区别,方法参数以及方法返回结果的序列化处理、HTTP传递都封装在.NET或者JAVA的框架之中,它们对客户端是透明的。
基于SOAP协议的WebService技术主要盛行在ArcGIS9.0\9.1\9.2的版本之中,但是在ArcGIS9.3的版本中,我们发现ArcGIS推出了基于REST(表述性状态转移)架构风格的服务。REST架构是有XX博士在2000年的博士论文中提出的,REST是一种架构风格,XX博士认为,在B/S系统中,各种服务器端的资源都可以通过一个唯一的URI来引用和访问,即服务器端的各种资源都是通过URI表述的,客户端对一个资源的访问过渡到另外一个资源(从一个资源的URL跳转到另外一个资源的URL)是通过状态转移来实现的。REST架构风格特别适合于构建服务式GIS。
原因主要在于:① REST是纯粹基于HTTP协议的,任何编程语言都支持,如JAVA、.NET、Flex、Javascript、Python、C\C++、VB等,所以很容易实现多语言平台;② REST架构风格消息主要基于JSON,JSON相比SOAP 的XML消息要更加精简;③ REST基于HTTP协议,因此可以使用HTTP缓存技术。所以,ArcGIS Server REST SDK的设计统一了多语言的RIA平台,如Flex、SilverLight、javascript。
既然有了REST SDK,是否就可以摒弃SOAP SDK呢,我觉得这是不可能的。为什么呢?因为ArcGIS Server REST SDK主要基于SOAP SDK 开发的,它是在SOAP SDK基础上按照REST HTTP架构设计做了二次封装。服务器端程序目前主流的技术主要是.NET和JAVA版本,所以ArcGIS Server有For .NET和For JAVA两个安装版本。实现REST架构的核心是要能处理各种HTTP请求,例如处理形如下面的HTTP请求:http://zxb-esri:8399/arcgis/rest/services/arcgis/MapServer/export?bbox=-223.9352882233539,-109.1292841402999,111.62342381635405,100.05715653830005
浙公网安备 33010602011771号