WSDL 标准:http://www.w3.org/TR/wsdl
请参看上述网站的内容。
我写的这篇帖子只是作为参考,加深理解。
?
wsdl的结构划分
1、WSDL 头定义
例如:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.sccs.sunyard.com/wxtcService/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="wxtcService" targetNamespace="http://www.sccs.sunyard.com/wxtcService/">
其中 xmlns:tns、?targetNamespace是需要自己定义的,当然你也可以保留默认http://example.com
2、wsdl:types
wsdl:types 允许你定义一些<xsd:element/>及<xsd:complexType>
定义这些时,有一些xml schemal 的常识有助于你的理解。
示例:
?<wsdl:types>
<xsd:schema targetNamespace="http://www.sccs.sunyard.com/wxtcService/">
?<xsd:complexType name="RequestHeader">
??????? <xsd:sequence>
???????? <xsd:element name="businessAcceptId" type="xsd:string"></xsd:element>
???????? <xsd:element name="TrnCode" type="xsd:string"></xsd:element>
??????????? </xsd:sequence>
????? </xsd:complexType>
?
?<xsd:element name="TestService">
????? ? <xsd:complexType>
????? ??<xsd:sequence>
????? ???<xsd:element name="in" type="xsd:string"></xsd:element>
????? ??</xsd:sequence>
???????? </xsd:complexType>
?????? </xsd:element>
?<xsd:element name="TestServiceRequest">
?????????? <xsd:complexType>
???????????? <xsd:sequence>
???????????????? <xsd:element name="RequestHeader" type="tns:RequestHeader"></xsd:element>
???????????????</xsd:sequence>
???????? </xsd:complexType>
?????? </xsd:element>
? <xsd:element name="TestServiceResponse">
??????????? <xsd:complexType>
??????????????? <xsd:sequence>
??????????????????? <xsd:element name="ResponseHeader" type="tns:ResponseHeader"></xsd:element>
??????????????????? <xsd:element name="Content">
??????????????????????? <xsd:complexType>
??????????????????????????? <xsd:sequence>
???????????????????????????????? <xsd:element name="RequestHeader" type="tns:RequestHeader"></xsd:element>
?????????????????????????????? </xsd:sequence>
??????????????????????? </xsd:complexType>
??????????????????? </xsd:element>
??????????????? </xsd:sequence>
??????????? </xsd:complexType>
</xsd:element>?
</wsdl:types>
?
3、wsdl:message
用于定义webservice的输入和输出。
示例:
? <wsdl:message name="TestServiceRequest">
? ?<wsdl:part name="parameters" element="tns:TestServiceRequest"></wsdl:part>
? </wsdl:message>
? <wsdl:message name="TestServiceResponse">
? ?<wsdl:part name="parameters" element="tns:TestServiceResponse"></wsdl:part>
? </wsdl:message>
4、wsdl:portType
定义webservice的主体。webservice将在这里组成。
<wsdl:portType>
??? <wsdl:operation name="TestService">
???????? ?<wsdl:documentation>测试示例</wsdl:documentation>
??? ?????? <wsdl:input message="tns:TestServiceRequest"></wsdl:input>
??? ???? <wsdl:output message="tns:TestServiceResponse"></wsdl:output>
??????????</wsdl:operation>
</wsdl:portType>
?
在这里引用前面message中定义的内容,组成webservice的访问主体,包括输入、输出等。
5、wsdl:binding
可以将binding看成访问webservice的入口。
?<wsdl:binding name="WXTCServiceSOAPBinding" type="tns:IWXTCService">
??? <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
??? <wsdl:operation name="TestService">
????? <soap:operation soapAction="http://www.sccs.sunyard.com/wxtcService/TestService"/>
????? <wsdl:input>
??????? <soap:body use="literal"/>
????? </wsdl:input>
????? <wsdl:output>
??????? <soap:body use="literal"/>
????? </wsdl:output>
??? </wsdl:operation>
? </wsdl:binding>
若这里没有定义TestService ,则TestService 将不可访问。
?
6、? wsdl:service
webservice的总入口,实际上,在wsdl的编辑工具中,该部件的图标就是一个接口图标。
这与其在整体wsdl中的位置很恰当
<wsdl:service name="WXTCService">
??? <wsdl:port binding="tns:WXTCServiceSOAPBinding" name="IWXTCServicePort">
????? <soap:address location="http://localhost:8000/SCCS/services/WXTCService"/>
??? </wsdl:port>
? </wsdl:service>
?
?
总结:
wsdl 的调用流程?
wsdl:service==>wsdl:binding==>wsdl:portType==>message==>wsdl:types
?
?
?