XML模式-WSD的描述

Web 服务描述语言(Web Services Description Language,WSDL)提供了一种描述 Web 服务(大多使用 SOAP)的简单方法。WSDL 允许您描述利用 SOAP 标准所提供的服务和接口。 比方说,可以创建描述某台服务器上提供的服务的 WSDL 文件,然后把该文件分发给需要这些服务的 W
Web 服务描述语言(Web Services Description Language,WSDL)提供了一种描述 Web 服务(大多使用 SOAP)的简单方法。WSDL 允许您描述利用 SOAP 标准所提供的服务和接口。
比方说,可以创建描述某台服务器上提供的服务的 WSDL 文件,然后把该文件分发给需要这些服务的 Web 服务消费者。通过阅读和解析 WSDL 文件,消费者能够了解到使用这些 Web 服务需要知道的所有信息,包括可以交换的数据类型、参数以及返回的各种错误和其他信息。
再次使用来自 W3C 的例子,可以看到不同远程函数的声明和交换的数据都是通过结构的 XML 定义处理的,如清单 3 所示。
清单 3. 不同远程函数和交换数据的 XML 定义

 <?xml version="1.0"?>



<!-- root element wsdl:definitions defines set of related services -->

<wsdl:definitions name="EndorsementSearch"

  targetNamespace="http://namespaces.snowboard-info.com"

  xmlns:es="http://www.snowboard-info.com/EndorsementSearch.wsdl"

  xmlns:esxsd="http://schemas.snowboard-info.com/EndorsementSearch.xsd"

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

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



  <!-- wsdl:types encapsulates schema definitions of communication types; 

                                                       here using xsd -->

  <wsdl:types>



    <!-- all type declarations are in a chunk of xsd -->

    <xsd:schema targetNamespace="http://namespaces.snowboard-info.com"

      xmlns:xsd="http://www.w3.org/1999/XMLSchema">



      <!-- xsd definition: GetEndorsingBoarder [manufacturer string, 

                                                        model string] -->

      <xsd:element name="GetEndorsingBoarder">

  <xsd:complexType>

    <xsd:sequence>

      <xsd:element name="manufacturer" type="string"/>

            <xsd:element name="model" type="string"/>

    </xsd:sequence>

  </xsd:complexType>

      </xsd:element>



      <!-- xsd definition: GetEndorsingBoarderResponse 

[... endorsingBoarder string ...] -->

      <xsd:element name="GetEndorsingBoarderResponse">

  <xsd:complexType>

    <xsd:all>

      <xsd:element name="endorsingBoarder" type="string"/>

    </xsd:all>

  </xsd:complexType>

      </xsd:element>



      <!-- xsd definition: GetEndorsingBoarderFault 

[... errorMessage string ...] -->

      <xsd:element name="GetEndorsingBoarderFault">

  <xsd:complexType>

    <xsd:all>

      <xsd:element name="errorMessage" type="string"/>

    </xsd:all>

  </xsd:complexType>

      </xsd:element>



    </xsd:schema>

  </wsdl:types>



  <!-- wsdl:message elements describe potential transactions -->



  <!-- request GetEndorsingBoarderRequest is of type GetEndorsingBoarder -->

  <wsdl:message name="GetEndorsingBoarderRequest">

    <wsdl:part name="body" element="esxsd:GetEndorsingBoarder"/>

  </wsdl:message>



  <!-- response GetEndorsingBoarderResponse is of type 

                                       GetEndorsingBoarderResponse -->

  <wsdl:message name="GetEndorsingBoarderResponse">

    <wsdl:part name="body" element="esxsd:GetEndorsingBoarderResponse"/>

  </wsdl:message>



  <!-- wsdl:portType describes messages in an operation -->

  <wsdl:portType name="GetEndorsingBoarderPortType">



    <!-- the value of wsdl:operation eludes me -->

    <wsdl:operation name="GetEndorsingBoarder">

      <wsdl:input message="es:GetEndorsingBoarderRequest"/>

      <wsdl:output message="es:GetEndorsingBoarderResponse"/>

      <wsdl:fault message="es:GetEndorsingBoarderFault"/>

    </wsdl:operation>

  </wsdl:portType>



  <!-- wsdl:binding states a serialization protocol for this service -->

  <wsdl:binding name="EndorsementSearchSoapBinding"

                type="es:GetEndorsingBoarderPortType">



    <!-- leverage off soap:binding document style ...(no wsdl:foo pointing at 

the soap binding) -->

    <soap:binding style="document"

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



    <!-- semi-opaque container of network transport details classed by 

soap:binding above ... -->

    <wsdl:operation name="GetEndorsingBoarder">



      <!-- again bind to SOAP? ... -->

      <soap:operation soapAction="http://www.snowboard-info.com/

EndorsementSearch"/>



      <!-- further specify that the messages in the wsdl:operation 

"GetEndorsingBoarder" use SOAP? ... -->

      <wsdl:input>

        <soap:body use="literal"

       namespace="http://schemas.snowboard-info.com/EndorsementSearch.xsd"/>

      </wsdl:input>

      <wsdl:output>

        <soap:body use="literal"

       namespace="http://schemas.snowboard-info.com/EndorsementSearch.xsd"/>

      </wsdl:output>

      <wsdl:fault>

        <soap:body use="literal"

       namespace="http://schemas.snowboard-info.com/EndorsementSearch.xsd"/>

      </wsdl:fault>

    </wsdl:operation>

  </wsdl:binding>



  <!-- wsdl:service names a new service "EndorsementSearchService" -->

  <wsdl:service name="EndorsementSearchService">

    <wsdl:documentation>snowboarding-info.com Endorsement Service</

wsdl:documentation> 



    <!-- connect it to the binding "EndorsementSearchSoapBinding" above -->

    <wsdl:port name="GetEndorsingBoarderPort"

               binding="es:EndorsementSearchSoapBinding">



      <!-- give the binding an network address -->

      <soap:address location="http://www.snowboard-info.com/EndorsementSearch"/>

    </wsdl:port>

  </wsdl:service>



 </wsdl:definitions>

WSDL 声明了消息类型、默认数据类型和内容以及交换的数据结构。
访问服务器上 SOAP 结构需要使用的一切信息都可以在这个 WSDL 中找到。大多数语言和环境都提供一种阅读和解析 WSDL 的机制,以确定可用的函数和数据交换。
WSDL 不仅定义了用于交换信息的 SOAP 接口,通过适当的 WSDL 生成程序,还可用于创建发送请求、生成并格式化响应所需要的代码。
WSDL 和 SOAP 组成了一个强大的远程过程调用系统。

以上就是XML模式-WSD的描述的详细内容,更多请关注其它相关文章!