【IT168 信息化】
引言
通过 Web 服务描述语言(WSDL)接口,Web 服务技术为分布式计算系统的动态绑定提供了基础,使得它们可以在异构的计算机网络间实现数据和函数的传输和交互。WSDL 可能会包含嵌入式 Web 服务或在多个 Web 服务间共享通用对象数据类型,由于数据和服务的内容和意义不能够被描述,WSDL 对那些想把 Web 服务集成到自己应用程序中的应用程序开发者来说是个困惑的问题。可以预见,在不远的将来,将会有大量不同服务者提供的 Web 服务大量出现,那么对于应用程序开发者来说,即使提供对象模型、流程图以及其它一些辅助信息资料,跟踪和理解这些 Web 服务调用的操作方法也会很困难。
将服务请求和响应规范化为基于 XML 文档的形式,以取代服务请求者和服务交互者之间交互的数据对象和函数,开发和利用地理空间 Web 服务的提议将明显改善地理空间 Web 服务的交流和实现过程。这一方法将 公开封装在面向对象技术中的隐藏信息,同时又 隐藏了实现细节;开发过程的简化将产生更加可靠的地理空间 Web 服务,并且这些地理空间 Web 服务具备智能化集成到分布式计算系统中的能力。它建议 Web 服务描述的新标准和新规范,特别是地理空间 Web 服务术语和标记的定义应该公式化,这样使得它可以进一步构建新一代地理空间 Web 服务以进行集成映射和地理信息处理,否则,这一问题对于地理信息系统(GIS)和 GIS 组织将会是个大难题。
WSDL 的困惑
WSDL 是开发和部署 Web 服务的核心概念,因为它在服务提供者和服务请求者之间建立了协议。WSDL 描述了输入输出变量的数据类型、每一个服务的操作集的名称、客户调用服务必须遵守的格式等等。然而,WSDL 协议 不包括: 请求服务所必须的一切信息。为理解如何调用 Web 服务,服务请求者必须至少满足下面条件中的一条:
·了解 Web 服务是如何构建的实现细节。
·处理 WSDL 文件。
·找到协议外的必要信息。
· 跟踪服务的对象图。
·从示例中学习。
本文利用一个名为 ArcWeb 的服务作为示例,它来自于 ESRI,一个 GIS 软件和技术领域的知名公司。 对于示例中 ESRI 的 ArcWeb 服务,它的地址查询 Web 服务通过一个名为 findAddress 的函数来查找一个指定地址的位置(经度和纬度)。你可以在 http://arcweb.esri.com/services/v2/AddressFinder.wsdl 中找到地址查询 Web 服务的 WSDL 文件。由于 WSDL 是服务请求者和服务提供者之间的协议,服务请求者必须首先通过研究协议的内容来了解如何调用这一服务。
WSDL 文件中的下述部分,如 清单 1 所示,描述了怎样调用 findAddress 函数,作为 <portType> 元素,它被定义为一组操作以及包含在每个操作中的消息。
清单 1: 地址查询 Web 服务的 WSDL 文件 -- <portType> 元素
<portType name="IAddressFinder">
<operation
name="findAddress"
parameterOrder=
"address addressFinderOptions token">
<documentation>Returns an x,y-coordinate from an address.</documentation>
<
input name="findAddress1In"
message="tns:findAddress1In" />
<
output name="findAddress1Out"
message="tns:findAddress1Out" />
</operation>
</portType>
这里, <message> 元素描述了将被传递的消息 -- 输入消息被命名为 findAddress1In,输出消息被命名为 findAddress1out。你可以在 WSDL 文件的下面片段跟踪 <message> 元素的详细信息。
清单 2: 地址查询 Web 服务的 WSDL 文件 -- <message> 元素
<message name="
findAddress1In">
<part name="address"
type="ns13:Address">
<documentation>the address find x,y-coordinates for.</documentation>
</part>
<part name="addressFinderOptions"
type="ns13:AddressFinderOptions">
<documentation>options object.</documentation>
</part>
<part name="token"
type="xsd:string">
<documentation>the authentication token.</documentation>
</part></message><message name="
findAddress1Out"></message>
<message name="
findAddress1Out">
<part name="Result"
type="ns12:LocationInfo">
<documentation>LocationInfo location information object.</documentation>
</part>
</message>
<message> 元素通过 <part> 子元素来描述其逻辑部分。每一个 <part> 元素具有一个名字和类型属性来定义消息 part 的名字及相应的数据类型。为调用函数 findAddress,需要 3 种类型: address、 AddressFinderOptions 和一个名为 token 的字符串数据类型。 在 <portType> 元素中,输入变量的顺序描述为 参数顺序 = address addressFinderOptions token 。 输出数据类型是一个名为 result 的 LocationInfo 对象。
在 WSDL 文件中 <types> 元素定义用来交换信息的各种数据类型。下面就是作为输入变量用来调用 findAddress 服务的每一种数据类型的描述。