信息化 频道

标准 Web 服务的语义请求和响应

    【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 服务的每一种数据类型的描述。

 

0
相关文章