现在的位置: 首页 > 综合 > 正文

《WebGIS开发实践手册》1.1.4 分布式计算的对象技术

2012年11月19日 ⁄ 综合 ⁄ 共 2249字 ⁄ 字号 评论关闭

互联网上的应用程序是基于TCP/IP协议来进行通信的,但这只是为不同计算机上的软件对象建立了互联的“通道”,它们之间还需要统一的“交流语言”才能实现彼此的沟通。

跨计算机的分布式应用在软件组件层次上遵守的某种特定软件标准[1],是实现异构平台和程序之间互操作性的保证。这种允许运行于一台计算机上的程序调用另一台计算机上的子程序的协议称为RPC(Remote Procedure Call,远程过程调用)。

分布式应用的出发点是能够实现不同计算机上相同或不同操作系统的软件对象能够互相调用,而编写这样的软件组件,目前我们已经有三个主要的标准来遵守,它们是:

Ø 微软的DCOM(Distributed COM,分布式组件对象模型);

Ø OMG[2](Object Management Group,对象管理组织)的CORBA(Common Object Request Broker Architecture,公共对象请求代理架构);

Ø SOAP[3](Simple Object Access Protocol,简单对象访问协议);

微软的DCOM规范了COM对象与远程计算机上另一个COM对象的交互过程,它规定了COM对象的创建和通讯机制,虽然这一规范本身不依赖任何特定语言和平台,但和大部分微软的产品一样,目前只在Windows平台中得到了实现,是微软的私家标准。

CORBA由对象请求代理ORB、对象服务、公共设施、域接口和应用接口等几个部分组成。其核心部分是对象请求代理ORB,ORB提供了一种机制让对象可以透明的发出请求和接收响应。

尽管CORBA被设计为可以在不同的平台上执行[4],DCOM可以在微软的平台上运行,但是基于CORBA和DCOM的解决方案必须依赖于同构的应用程序,双方无法互相通信。更糟糕的是,这两种标准都是基于RPC协议的一种二进制标准(其中CORBA基于IIOP,DCOM基于ORPC协议),在Internet编程环境中,它们无法通过防火墙和代理服务器的“绞杀”,只能适用于稳定的计算机网络中。

由于DCOM和CORBA无法在Internet环境中稳定实现,促使了SOAP协议的出现,SOAP采用了HTTP和XML这两个已经得到了广泛使用的协议:HTTP用于实现SOAP的RPC风格的传输,XML则是它的编码格式。

尽管SOAP的HTTP并不是最有效的传输方式,而且还需要在客户端和服务器端进行XML解析,使用的时间较其它协议更多,但HTTP的稳定性和XML的纯文本特性使得它能够在Internet环境中得到广泛的应用,无需再恐惧防火墙的阻挡,如图 1‑8所示:

clip_image0021‑8 两种不同架构的PRC遇到防火墙

现在一提到SOAP这个名词,就似乎与Web服务紧密相连,但SOAP出现时间早在Web服务之前。由于SOAP只是现存技术的组合,并没有发明任何新的技术,而HTTP协议和基于文本的XML数据更是被所有平台接收,因此SOAP具有天生的互操作性和跨平台性。

SOAP协议目前已经得到了广泛的应用,在ArcGIS Server9.2中,ESRI就为操作GIS服务器端的对象提供了一套SOAP API,以方便用户与服务器端的对象进行交互。由于所有的ArcGIS Server对象都实现了IRequestHandler接口,而这一接口能够响应SOAP请求,因此与SOAP交互的能力是与生俱来的,开发人员可以通过SOAP直接与服务器对象交互而无需通过Web服务[5]

小知识:XML-RPC

如果将Web看作是一个巨大的分布式编程环境,显然地,在分布式环境中的远程调用RPC一般都应该基于HTTP进行传输。除了曾经介绍的SOAP以外,另一种常见的基于HTTP的RPC方式,即XML-RPC。

XML-RPC是使用 HTTP 作为传输协议和使用 XML 作为编码方式的远程过程调用。其设计力求简单,并同时允许传输、处理和返回复杂数据结构。虽然与SOAP一样,也是一种基于HTTP的POST式请求,但不同的是它没有复杂的XML结构,下面是一个XML-RPC的典型请求[6]

POST /RPC2 HTTP/1.0

User-Agent: Frontier/5.1.2 (WinNT)

Host: betty.userland.com

Content-Type: text/xml

Content-length: 181

<?xml version="1.0"?>

<methodCall>

<methodName>examples.getStateName</methodName>

<params>

<param>

<value><i4>41</i4></value>

</param>

</params>

</methodCall>

目前许多blog程序的本地写作软件,如Windows Live Writer都可以使用blog提供的XML-RPC API与blog进行数据交换。


[1] 它们都是基于HTTP、ORPC等协议之上的

[2] http://www.omg.org/

[3] http://www.w3.org/TR/soap/

[4] 但事实证明,CORBA协议的实现也依赖不同厂商的具体产品

[5] ArcGIS Server的SOAP协议可见:http://edndoc.esri.com/arcobjects/9.2/NET_Server_Doc/developer/ArcGIS/SOAP/overview.htm

[6] XML-RPC的标准可见:http://www.xmlrpc.com/spec

抱歉!评论已关闭.