文章教程

16.3Web服务协议

8/31/2020 9:52:39 PM 人评论 次浏览

16.3 Web服务协议

Web服务需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web服务平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。在Web服务体系结构中主要包括以下三个核心服务,分别表示了三种Web服务协议:SOAP,用于数据传输;WSDL,用于描述服务,UDDI,用于获取可用的服务。

16.3.1 Web服务描述语言

Web服务中的三个文件,它们都以服务的名字为文件名,分别以.disco、discomap、wsdl为扩展名。其中的disco文件能够发现每个Web服务的功能(通过文档),以及如何与它们进行交互(通过WSDL)。该文件是Visual Studio 2012在“添加Web引用”时自动生成的。看以下这个文档的内容。它是一个XML文档,只包含了该Web服务链接到其他资源的地址。代码如下所示:

alt

以上代码中<discovery>元素中指出了它对其他资源的应用。<contractRef>元素的ref属性指向了Web服务的WSDL文档,是用来描述这个服务的。根据disco文件可以获得WSDL文档。

WSDL是一个基于XML的标准,它指定客户端如何与Web服务进行交互,包括诸如一条信息中的参数和返回值如何被编码以及在互联网上传输时应该使用何种协议等等。目前,有三种标准支持实际的Web服务信息的传送:HTTP GET、HTTP POST和SOAP。

读者可以在http://www.w3.org/TR/wsdl看到完整的WSDL标准。这个标准相当的复杂,但是这个标准背后的逻辑,对于进行ASP.NET开发的编程人员来说是隐藏的,这就像ASP.NET的Web控件抽象行为被封装一样。开发人员不需要知道这个标准具体的逻辑关系,只需要知道如何使用这个标准即可,把那些复杂逻辑行为留给系统和框架来解释执行。ASP.NET可以创建一个基于WSDL文档的代理类。这个代理类允许客户端调用Web服务,而不用担心网络或格式的问题。很多非.NET平台提供了相似的工具来完成同样的事务,例如VB 6.0和C++程序员也可以使用SOAP工具包。

WSDL是一种规范,它定义了如何用共同的XML语法描述Web服务。WSDL描述了4种关键的数据:

● 描述所有公用函数的接口信息;

● 所有消息请求和消息响应的数据类型信息;

● 所使用的传输协议的绑定信息;

● 用来定位指定服务的地址信息。

总之,WSDL在服务请求者和服务提供者之间提供一个协议。WSDL独立于平台和语言,主要用于描述SOAP服务。客户端可以用WSDL找到Web服务,并调用其任何公用函数。还能够使用可识别WSDL的工具自动完成这个过程,使应用程序只需少量甚至不需手工编码就可以容易地连接新服务。WSDL为描述服务提供了一种共同的语言,并为自动连接服务提供了一个平台,因此,它是Web服务结构中的基石。

WSDL是描述Web服务的XML语法。这个规范本身分为6个主要的元素:

(1)definitions

definitions元素必须是所有WSDL文档的根元素。它定义Web服务的名称,声明文档其他部分使用的多个名称空间,并包含这里描述的所有服务元素。

(2)types

types元素描述在客户端和服务器之间使用的所有数据类型。虽然WSDL没有专门被绑定到某个特定的类型系统上,但它以XML Schema规范作为其默认的选择。如果服务只用到诸如字符串型或整型等XML Schema内置的简单类型,就不需要types元素。

(3)message

message元素描述一个单向消息,无论是单一的消息请求还是单一的消息响应,它都进行描述。message元素定义消息名称,它可以包含零个或更多的引用消息参数或消息返回值的消息part元素。

(4)portType

portType元素结合多个message元素,形成一个完整的单向或往返操作。一个portType可以定义多个操作。

(5)binding

binding元素描述了在Internet上实现服务的具体细节。WSDL包含定义SOAP服务的内置扩展,因此,SOAP特有的信息会转到这里。

(6)service

service元素定义调用指定服务的地址,一般包含调用SOAP服务的URL。

(7)documentation

documentation元素用于提供一个可阅读的文档,可以将它包含在任何其他WSDL元素中。

除了上述主要的元素,WSDL规范还定义了其他实用元素,但是没有以上这些元素用的多,这里就省略介绍了。

WSDL文件中最重要的部分也就是对类型的定义。这一部分使用XML模式去描述数据交换的格式,数据交换的格式要通过使用XML元素和元素之间的关系来定义。这些主要元素的关系如图16-6所示。

alt

图16-6 WSDL元素关系

要查看WSDL文档的内容只需在WebService对话框中单击“服务说明”链接,就能进入如图16-7所示文档页面。

alt

图16-7 WSDL文档部分内容

16.3.2 简单对象访问协议

最早的时候,在.NET框架中,客户端在与Web服务交互时有两种协议能够使用。

● HTTP GET:使用该协议与Web服务交互时,会把客户端发送的信息编码然后放在查询字符串里,而客户端获取的Web服务的信息则是以一个基本的XML文档的形式存在。

● HTTP POST:使用该协议与Web服务交互时,会把参数放在请求体里面,而获取的信息则是以一个基本的XML文档的形式存在。

但是,随着信息的丰富化,需要传输的数据往往是结构化的,这样就出现了简单对象访问协议SOAP(Simple Object Access Protocol),这是一种轻量的、简单的、基于XML的协议,它被设计成在Web上交换结构化的和固化的信息。SOAP可以和现存的许多因特网协议和格式结合使用。包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。HTTP是SOAP消息反复发送的结果。它好比一个邮递员拿着SOAP信封去目的地一样。SOAP消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求/应答的模式。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。

SOAP在Web服务的技术层次中起到的作用是:作为对应用共享的消息进行包装的标准协议。SOAP规范定义了简单的基于XML包装传递信息和将与平台相关的应用数据类型转化成XML表示的一些规则。SOAP的设计非常适合处理多种应用消息传递和集成模式。这一点是SOAP使用非常普遍的最主要的原因。

SOAP规范主要定义了三个部分。

1.SOAP信封规范

SOAP XML信封(SOAP XML Envelope)对在计算机间传递的数据如何封装定义了具体的规则。这包括应用特定的数据,如要调用的方法名、方法参数或返回值;还包括哪部分将处理封装内容,失败时如何编码错误消息等信息。

2.数据编码规则

为了交换数据,计算机必须在编码特定数据类型的规则上达成一致。SOAP必须有一套自己的编码数据类型的约定,大部分约定都基于W3C XML Schema规范。

3.RPC协定

SOAP能用于单向和双向等各种消息接发系统。SOAP为双向消息接发定义了一个简单的协定来进行远程过程调用和响应,这使得客户端应用可以指定远程方法名,获取任意多个参数并接收来自服务器的响应。

关于SOAP标准的更多、更详细的信息,读者可以到http://www.w3.org/TR/SOAP阅读全部的规范。

16.3.3 统一描述、发现和集成协议

UDDI(Universal Description Discovery and Integration)是Web服务家族中最新和发展最快的标准之一。它最初被设计出来的目的是能够让开发人员非常容易地定位到任何服务器上的Web服务。

要定位Web服务,客户端必须要知道特定的URL位置。通过发现文件把不同的Web服务放到一个文件中可以让这一过程变得相对容易一些。但是它并没有提供任何明显的方法来检测一个公司提供的Web服务。UDDI的目的是:提供一个库,在这个库中,商业公司可以为他们所拥有的Web服务做广告。比如,一个公司可能列出所有用于业务文件交换的服务,这些业务文件交换服务具有提交购买定单和跟踪获取的信息等功能。但为了能让客户端获取这些Web服务,这些Web服务必须被注册在UDDI库中。

对于Web服务,UDDI就相当于一个搜索引擎,比如互联网上的Google。但UDDI却也有很大的不同,大部分搜索引擎试图搜索整个互连网,而为所有的Web服务建立一个UDDI注册却不需要达到那样的程度,因为不同的工业有着不同的需要,并且一个非组织的搜集并不能让所有人满意。相反,它更像是公司的组织和联盟,把他们这个领域的UDDI注册绑定在一起。

有趣的是,UDDI注册定义了一个完全编程接口,这个接口说明了SOAP信息能够被用来获取一个商务信息或为一个商务注册Web服务。换句话说,UDDI注册本身就是一个Web服务!这个标准虽然还没有被推广使用,但是读者在http://uddi.microsoft.com可以找到详细的说明。

教程类别