WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
什么是 WSDL?
- WSDL 指网络服务描述语言
- WSDL 使用 XML 编写
- WSDL 是一种 XML 文档
- WSDL 用于描述网络服务
- WSDL 也可用于定位网络服务
- WSDL 还不是 W3C 标准
WSDL文档结构
<import>
import元素使得可以在当前的WSDL文档中使用其他WSDL文档中指定的命名空间中的定义元素。
<service>
元素包含一个或者多个port元素,其中每个port元素表示一个不同的Web服务。
<port>
定义为绑定和网络地址组合的单个端点。
<portType>
最重要的 WSDL 元素。它可描述一个 web service、可被执行的操作,以及相关的消息。可以把 <portType> 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。
<message>
通信数据的抽象类型化定义,它由一个或者多个 part 组成。
<types>
web service 数据类型定义的容器,它使用某种类型系统(如 XSD)
<binding>
web service 使用的通信协议,将一个抽象portType映射到一组具体协议(SOAO和HTTP)、消息传递样式、编码样式。
<part>
消息参数,指定引用types中定义的标签片段
<partType>
特定端口类型的具体协议和数据格式规范,它由一个或者多个 Operation组成。
<Operation>
对服务所支持的操作进行抽象描述。
Soap
soap是一种传输协议,该协议使用的就是http协议。只不过HTTP传输的内容是HTML文本,而SOAP协议传输的是SOAP的数据。
<Soap:binding>
指出绑定是针对soap协议格式的。Transport指定了传输协议。Style指定通信风格。有“rpc”和“document”两种风格。
<Soap:operation>
为SOAP服务操作提供消息。通常可以指明此操作的soapActionHTTP头。
<soap:header>
指出消息如何在soap header元素中表现
<Soap:body>
指出消息如何在soap body元素中表现。
Low Fare Search Req
Air.wsdl:
<binding name="AirLowFareSearchBinding"
type="tns:AirLowFareSearchPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="service">
<soap:operation soapAction="http://localhost:8080/kestrel/AirService"/>
<input>
<soap:header use="literal" part="sessionContext" message="tns:SessionContext"/>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="ErrorInfoMsg">
<soap:fault name="ErrorInfoMsg" use="literal" />
</fault>
</operation>
</binding>
<port name="AirLowFareSearchPort"
binding="tns:AirLowFareSearchBinding">
<soap:address
location="http://localhost:8080/kestrel/AirService" />
</port>
如上代码,<binding name="AirLowFareSearchBinding" type="tns:AirLowFareSearchPortType">
是将name为AirLowFareSearchPortType的portType映射过来。
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
通信风格为document,传输协议为”http://schemas.xmlsoap.org/soap/http“。
<operation>…</operation>创建soap协议,定义协议内容。
AirAbstract.wsdl:
<message name="AirLowFareSearchReq">
<part name="parameters" element="ns1:LowFareSearchReq" />
</message>
<message name="AirLowFareSearchRsp">
<part name="result" element="ns1:LowFareSearchRsp" />
</message>
<message name="AirFaultMessage">
<part name="fault" element="common:ErrorInfo" />
</message>
<portType name="AirLowFareSearchPortType">
<operation name="service">
<input message="tns:AirLowFareSearchReq" />
<output message="tns:AirLowFareSearchRsp" />
<fault name="ErrorInfoMsg" message="tns:AirFaultMessage" />
</operation>
</portType>
如上代码,定义一个端口为:AirLowFareSearchPortType,在该端口中定义了一个操作”service”,操作 “service” 拥有一个名为 “tns:AirLowFareSearchReq” 的输入消息,一个名为 “tns:AirLowFareSearchRsp” 的输出消息,以及一个名为”ErrorInfoMsg”的失败返回消息,其中message属性则是调用上面<message>,<message>下的<part>中的element则是调用对应xsd中的属性。注:若通信风格为rpc,则element需改为type。