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>