ASP.NET创建XML Web服务全接触(3)
XML Web服务描述
XML Web服务基础结构创建在使用遵循一个公布的服务描述的基于XML的消息的通信的基础上。服务描述是一个使用WSDL语言的XML语法编写的XML文档,定义了XML Web服务能理解的XML Web服务消息格式。服务描述起一个协定的作用,用来定义一个XML Web服务的行为并且指示潜在的客户如何与之交互。XML Web服务的行为取决于服务定义和支持的消息类型。这些模式在概念上指示了服务使用者在相应格式的消息被发送到XML Web服务时可以期待什么。
例如,与远程过程调用(RPC)风格的服务关联的请求/响应模式将定义哪个SOAP消息模式用来调用一个特定的方法。这个模式还将定义响应SOAP消息将遵循的格式。
消息模式的另一个例子表示单方面的交互操作。这个模式在单向通信发生的时候被使用。在这种情况下,发送方不会从XML Web服务中接收任何消息,包括故障消息。 定义SOAP消息格式的模式可以在内部定义来进行实际的服务描述,它们也可以在外部定义并被导入服务描述。
除了消息格式的定义和消息模式以外,服务描述还可选择性的包含每个XML Web服务入口点的地址。这个地址的格式对应于用于访问服务的协议,例如URL对应于HTTP或者电子邮件地址对应于SMTP(简单邮件传送协议)。
更多WSDL规格的信息,请看W3C Web站点(http://www.w3.org/TR/wsdl)。
XML Web服务连接格式
象DCOM那样的二进制协议由一个去掉专有的通信协议的顶部的方法请求层组成。这样的协议对创建普遍可用的XML Web服务没有帮助。这么说并不是说阻止你们在XML Web服务方案中使用这样的协议,但是使用它们的缺点在于这样的协议依靠它们的底层系统的特定结构,因此限制了潜在客户的增加。
取而代之,你可以构造XML Web服务来协同一个或多个开放协议一起工作,就象HTTP和SOAP的综合使用一样。象你所料想的那样,基础结构要求支持不同的协议。
XML Web服务不局限于提供远程过程调用访问。它们还可以被构造来交换结构化的信息,例如采购订单和发货单,并且还可用于自动化和连接内部与外部的业务处理。
HTTP-GET和HTTP-POST
HTTP-GET和HTTP-POST是使用HTTP的标准协议动词,用于编码和传送变量名/变量值对参数,并且使用相关的请求语义。每个HTTP-GET和HTTP-POST都由一系列HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么,而响应则是由一系列HTTP应答头和应答数据组成,如果请求成功则返回应答。
HTTP-GET以使用MIME类型application/x-www-form-urlencoded的urlencoded文本的格式传递参数。Urlencoding是一种字符编码,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是\"%20\"。附加参数还能被认为是一个查询字符串。
与HTTP-GET类似,HTTP-POST参数也是被URL编码的。然而,变量名/变量值不作为URL的一部分被传送,而是放在实际的HTTP请求消息内部被传送。
SOAP简介
SOAP是一个简单的、重量轻的基于XML的协议,用于交换Web上的结构化的和模式化的信息。SOAP的总体设计目标是使它保持尽可能的简单,并且提供最少的功能。这个协议定义了一个不包含应用程序或传输语义的消息框架。因此,这个协议是模块化的并且非常利于扩展。
通过越过标准传输协议,SOAP能利用因特网现有的开放体系结构,并且能够被任何支持最基本的因特网标准的系统所接受。通过越过标准传输协议,SOAP能利用因特网现有的开放体系结构,并且能够被任何支持最基本的因特网标准的系统所接受。你可以看到,基础结构要求支持一个虽然简单但是功能强大的遵从SOAP的XML Web服务,因为它基本不向现有的因特网基础结构中添加新的内容,然而却有助于访问SOAP构造的服务。
SOAP协议规范由四个主要的部分组成。第一部分定义了一个强制的可扩展信封(envelope)用于封装数据。SOAP信封定义了一条SOAP消息和在SOAP信息处理器之间交换的基本单元。这是这个规格唯一的强制性的部分。
SOAP协议规范的第二部分定义了可选数据编码规则用于表示应用程序定义的数据类型和直接图表,以及一个用于序列化非语法数据模型的统一模型。
第三部分定义了一个远程过程调用风格(请求/响应)信息交换的模式。每个SOAP消息都是单向传输。虽然SOAP的根源于RPC,但是它不局限于请求/响应机制。XML Web服务经常联合SOAP消息来实现这样的模式,但是SOAP并不必须使用信息交换模式,并且规格的这个部分是可选的。
这个规格的第四部分定义了SOAP和HTTP之间的绑定。然而,这个部分还是可选的。你可以让SOAP和任何转送协议或机制一起协同使用,这些传送协议能够传送SOAP信封,包括SMTP、FTP甚至一个软盘。
更多SOAP规格的信息,请看W3C Web站点(http://www.w3.org/TR/soap)。