zoukankan      html  css  js  c++  java
  • Webservice学习之WSDL详解

    1. <definitions/>

    这部分在基础篇里已经介绍,主要说明引用了哪些schema以及schema的位置等,可以看下基础篇的介绍,SayHello的Demo这部分内容如下:

    <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.service.server.ws.devins.com/"
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http"
        xmlns:ns1="http://service.server.ws.devins.com/" name="SayHelloImplService"
        targetNamespace="http://impl.service.server.ws.devins.com/">

    2. <types/>

    <types> 元素定义 web service 使用的数据类型,为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型

             <!-- 
              types
              schema:约束xml格式
              element:用来指定xml中的标签
                      <sayHello></sayhello>
                      <sayHelloResponse></sayHelloResponse>
              complexType:说明是一个复合类型
                               请求 
                       <sayHello>
                           <arg0>string</arg0>
                       </sayhello>
                         响应
                       <sayHelloResponse>
                           <return>string</return>
                       </sayHelloResponse>
                       
            回看下demo的请求与响应的核心内容
                 <q0:sayHello>
                  <arg0>devins</arg0> 
                </q0:sayHello>
                
                <ns2:sayHelloResponse">
                  <return>Hello: devins</return> 
                </ns2:sayHelloResponse>
                      
          -->
        <wsdl:types>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:tns="http://service.server.ws.devins.com/" elementFormDefault="unqualified"
                targetNamespace="http://service.server.ws.devins.com/" version="1.0">
                <xs:element name="sayHello" type="tns:sayHello" />
                <xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />
                <xs:complexType name="sayHello">
                    <xs:sequence>
                        <xs:element minOccurs="0" name="arg0" type="xs:string" />
                    </xs:sequence>
                </xs:complexType>
                <xs:complexType name="sayHelloResponse">
                    <xs:sequence>
                        <xs:element minOccurs="0" name="return" type="xs:string" />
                    </xs:sequence>
                </xs:complexType>
            </xs:schema>
        </wsdl:types>

    3. <message/>

    <message> 元素定义一个操作的数据元素,每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。

            <!-- 
            message:用来定义soap消息结构
            part:部分/组成的意思
            实际上引用的就是上面schema中的约束格式
         -->
        <wsdl:message name="sayHelloResponse">
            <wsdl:part element="ns1:sayHelloResponse" name="parameters" />
        </wsdl:message>
        <wsdl:message name="sayHello">
            <wsdl:part element="ns1:sayHello" name="parameters" />
        </wsdl:message>

    4. <portType/>

           <portType> 元素是最重要的 WSDL 元素,它可描述一个 web service、可被执行的操作,以及相关的消息,可以把 <portType> 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。

            <!-- 
            portType:用来指定服务器端的SEI(接口)
            operation:表示操作/行为,即SEI中定义的方法
            input:方法sayHello的输入
            output:方法sayHello的输出
            输入输出引用的是上面message的定义
         -->
        <wsdl:portType name="ISayHello">
            <wsdl:operation name="sayHello">
                <wsdl:input message="ns1:sayHello" name="sayHello" />
                <wsdl:output message="ns1:sayHelloResponse" name="sayHelloResponse" />
            </wsdl:operation>
        </wsdl:portType>

    5. <binding/>

    <binding> 元素为每个端口定义消息格式和协议细节。

        <!-- 
            binding:用来指定SEI的实现类
            type属性:引用<portType>定义
            <soap:binding style="document">:表示传输的一个document (xml)
            <input><output>与上节说的相同
            <soap:body use="literal" />:表示body传输采用文本即xml格式的文本
         -->
        <wsdl:binding name="SayHelloImplServiceSoapBinding" type="ns1:ISayHello">
            <soap:binding style="document"
                transport="http://schemas.xmlsoap.org/soap/http" />
            <wsdl:operation name="sayHello">
                <soap:operation soapAction="" style="document" />
                <wsdl:input name="sayHello">
                    <soap:body use="literal" />
                </wsdl:input>
                <wsdl:output name="sayHelloResponse">
                    <soap:body use="literal" />
                </wsdl:output>
            </wsdl:operation>
        </wsdl:binding>

    6. <service>

        <!-- 
            service:相同于webservice容器,也可理解为一个工厂
            name:用于指定客户端的容器类/工厂类,客户端代码从此类开始
            port:用来指定服务器端的一个入口(对应SEI的实现类)
            port binding:引用上面定义的
            port name:容器通过这个方法获得实现类
            address:客户端真正用于请求的地址
            
            回想我们的demo:
            SayHelloImplService factory = new SayHelloImplService();
            SayHelloImpl sayHelloImpl = factory.getSayHelloImplPort();
         -->
        <wsdl:service name="SayHelloImplService">
            <wsdl:port binding="tns:SayHelloImplServiceSoapBinding"
                name="SayHelloImplPort">
                <soap:address location="http://132.122.239.74:8089/ws/sayhello" />
            </wsdl:port>
        </wsdl:service>

    7. 总结

    转自:https://blog.csdn.net/posonrick/article/details/45580355?utm_source=blogxgwz1

  • 相关阅读:
    C嵌入汇编
    App 运营 推广相关
    POJ 3904 Sky Code
    数组的复制与动态扩展算法
    另类病毒的自删除方法
    oracle触发器中增删改查本表
    POJ 2773 Happy 2006 数学题
    Android手机便携式wifi的使用及无线数据传输(主要针对XP系统)
    Find the minimum线段树成段更新
    使用visual c++ 2005编译64位可执行文件
  • 原文地址:https://www.cnblogs.com/sunfie/p/10662719.html
Copyright © 2011-2022 走看看