WSDL在Web Service中的意义和作用

王朝java/jsp·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

1. WSDL

a)

原理:从XML-RPC和SOAP的使用我们可以看到,请求消息都是根据服务提供方的服务接口来生成一个HTTP请求,在请求当中封装所要调用的方法,以及方法调用时的参数。

客户端服务调用代码要完成的任务,也就是使用实现所提供的接口,来声明调用方所需要的方法名及参数,然后由实现根据用户的输入来组合HTTP请求。

这个过程可以这样来描述,首先获取用户输入,然后把输入变成实现所要求的存储格式,然后再把该格式变成HTTP请求。一般情况下,我们需要手工完成到第二步,但是,这个过程显然是可以把他自动化的,自动化的效果就是用户不再需要书写这部分的代码,减少工作量和降低出错几率。

自动化的过程就需要WSDL的参与,他提供了服务方服务的描述,调用方根据这个描述,就可以知道服务所需要的参数个数,然后向用户索取。得到输入以后,实现可以根据WSDL的要求来把输入转换成特定的存储格式,或者直接生成最后的HTTP请求。

对于每个服务,WSDL需要描述两部分的内容,一是接口,二是实现。接口描述了服务的格式,例如服务名,服务参数,服务结果。服务实现则描述了,用户所对应提供的输入如何转换成符合某一实现协议的形式,一般情况下,我们使用SOAP作为实现协议,那么客户端在分析了WSDL文件以后,将会把用户的输入转换成我们已经看到过的SOAP请求,之后的过程就与之前的完全一样。

2. WSDL实例

a)

导言部分:指定了下文将要使用的数据类型和消息类型。

<?xml version="1.0"

encoding="UTF-8"?>

<wsdl:definitions

name="HelloWorldDescription"

targetNamespace="urn:HelloWorld"

xmlns:tns="urn:HelloWorld"

xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<wsdl:message

name="sayHello_IN">

<part

name="name" type="xsd:string" />

</wsdl:message>

<wsdl:message

name="sayHello_Out">

<part

name="greeting" type="xsd:string" />

</wsdl:message>

b)

服务接口:描述了方法名,和输入输出参数。

<wsdl:portType

name="HelloWorldInterface">

<wsdl:operation

name="sayHello">

<wsdl:input

message="tns:sayHello_IN" />

<wsdl:output

message="tns:sayHello_OUT" />

</wsdl:operation>

</wsdl:portType>

c)

服务实现:描述了某一个服务接口如何转换为SOAP请求。

<wsdl:binding

name="HelloWorldBinding" type="tns:HelloWorldInterface">

<soap:binding

style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation

name="sayHello">

<soap:operation

soapAction="urn:Hello" />

<wsdl:input>

<soap:body

use="encoded" namespace="urn:Hello"

encodingStyle=http://schemas.xmlsoap.org/soap/encoding//>

</wsdl:input>

<wsdl:output>

<soap:body

use="encoded" namespace="urn:Hello"

encodingStyle=http://schemas.xmlsoap.org/soap/encoding//>

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

d)

服务位置:指定了SOAP请求所要发送的目的地。

<wsdl:service

name="HelloWorldService">

<wsdl:port

name="HelloWorldPort" binding="tns:HelloWorldBinding">

<soap:address location="http://localhost:8080"

/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航