• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • WebService描述語言WSDL詳解(5)

    發表于:2007-05-25來源:作者:點擊數: 標簽:WebServiceWSDL描述詳解語言
    數組 XSD提供<list>結構來聲明一個數組,元素之間有空格界定。不過SOAP不是使用XSD來編碼數組的,它定義了自己的數組類型--"SOAP-ENC: Array"。下列的例子揭示了從這一類型派生出一位整數數組的方法: <xsd:complexType name="ArrayOfInt"> <xsd:comple
    數組

      XSD提供<list>結構來聲明一個數組,元素之間有空格界定。不過SOAP不是使用XSD來編碼數組的,它定義了自己的數組類型--"SOAP-ENC: Array"。下列的例子揭示了從這一類型派生出一位整數數組的方法:

    <xsd:complexType name="ArrayOfInt">
    <xsd:complexContent>
    ?。紉sd:restriction base="soapenc:Array">
     ?。糰ttribute ref="soapenc:arrayType" wsdl:arrayType="xsd:int[]"/>
    ?。?xsd:restriction>
    </xsd:complexContent>
    </xsd:complexType>

      新的complex類型從soapenc:array限制派生。然后又聲明了complex類型的一個屬性。引用"soapenc:arrayType"實際上是這樣完成的:

    <xsd:attribute name="arrayType" type="xsd:string"/>

      wsdl:arrayType屬性值決定了數組每個成員的類型。數組的成員也可以是Complex類型。:

    <xsd:complexType name="ArrayOfPERSON">
    <xsd:complexContent>
    <xsd:restriction base="soapenc:Array">
    <attribute ref="soapenc:arrayType"
    wsdl:arrayType="typens:PERSON[]"/>
    </xsd:restriction>
    </xsd:complexContent>
    </xsd:complexType>

      WSDL要求數組的類型由"ArrayOf"和每個數組元素的類型串聯而成。很顯然,顧名思義,"ArrayOfPERSON"是PERSON結構的數組。下面我將使用ArrayOfPERSON來聲明一個<message>,并加入不止一個PERSON:

    <?xml version="1.0" encoding="UTF-8" ?>
    <definitions … >
    <types>
    <schema targetNamespace="someNamespace"
    xmlns:typens="someNamespace" >
    <xsd:complexType name="PERSON">
    ?。紉sd:sequence>
     ?。紉sd:element name="firstName" type="xsd:string"/>
     ?。紉sd:element name="lastName" type="xsd:string"/>
     ?。紉sd:element name="ageInYears" type="xsd:int"/>
     ?。紉sd:element name="weightInLbs" type="xsd:float"/>
     ?。紉sd:element name="heightInInches" type="xsd:float"/>
    ?。?xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ArrayOfPERSON">
    <xsd:complexContent>
    <xsd:restriction base="soapenc:Array">
    <attribute ref="soapenc:arrayType"
    wsdl:arrayType="typens:PERSON[]"/>
    </xsd:restriction>
    </xsd:complexContent>
    </xsd:complexType>
    </schema>
    </types>

    <message name="addPersons">
    ?。紁art name="person" type="typens:ArrayOfPERSON"/>
    </message>

    <message name="addPersonResponse">
    ?。紁art name="result" type="xsd:int"/>
    </message>

    </definitions>

    <portType>和<operation>元素

      PortType定義了一些抽象的操作。PortType中的operation元素定義了調用PortType中所有方法的語法,每一個operation元素聲明了方法的名稱、參數(使用<message>元素)和各自的類型(<part>元素要在所有<message>中聲明)。

      在一篇WSDL文檔中可以有幾個<PortType>元素,每一個都和一些相關操作放在一起,就和COM和一組操作的接口相似。

      在<operation>元素中,可能會有至多一個<input>元素,一個<output>元素,以及一個<fault>元素。三個元素各有一個名字和一個消息屬性。

     ?。糹nput>, <output>, <fault>元素屬性的名字有何含義呢?它們可以用來區別兩個同名操作(重載)。例如,看下面兩個C函數:

    void foo(int arg);
    void foo(string arg);

      這種重載在WSDL中可以這樣表示:

    <?xml version="1.0" encoding="UTF-8" ?>
    <definitions name="fooDescription"
     targetNamespace="http://tempuri.org/wsdl/"
     xmlns:wsdlns="http://tempuri.org/wsdl/"
     xmlns:typens="http://tempuri.org/xsd"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
     xmlns:stk="http://schemas.microsoft.com/soap-toolkit/wsdl-
     extension"
     xmlns="http://schemas.xmlsoap.org/wsdl/">
    <types>
    <schema targetNamespace="http://tempuri.org/xsd"
     xmlns="http://www.w3.org/2001/XMLSchema"
     xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
     elementFormDefault="qualified" >
    </schema>
    </types>

    <message name="foo1">
    ?。紁art name="arg" type="xsd:int"/>
    </message>

    <message name="foo2">
    ?。紁art name="arg" type="xsd:string"/>
    </message>

    <portType name="fooSamplePortType">
    <operation name="foo" parameterOrder="arg " >
    ?。糹nput name="foo1" message="wsdlns:foo1"/>
    </operation>
    <operation name="foo" parameterOrder="arg " >
    ?。糹nput name="foo2" message="wsdlns:foo2"/>
    </operation>
    </portType>

    <binding name="fooSampleBinding" type="wsdlns:fooSamplePortType">
    <stk:binding preferredEncoding="UTF-8" />
    <soap:binding style="rpc"
    transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="foo">
    <soap:operation soapAction="http://tempuri.org/action/foo1"/>
    ?。糹nput name="foo1">
     ?。約oap:body use="encoded" namespace="http://tempuri.org/message/"
        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
    ?。?input>
    </operation>
    <operation name="foo">
    <soap:operation soapAction="http://tempuri.org/action/foo2"/>
    <input name="foo2">
    <soap:body use="encoded"
       namespace="http://tempuri.org/message/"
       encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    />
    </input>
    </operation>
    </binding>

    <service name="FOOService">
    <port name="fooSamplePort" binding="fooSampleBinding">
    <soap:address
      location="http://carlos:8080/fooService/foo.asp"/>
    </port>
    </service>
    </definitions>

      到目前為止,還沒有一種SOAP的實現支持重載。這對基于JAVA的客戶端十分重要,因為JAVA服務器使用的接口用到JAVA的重載特性。而對基于COM的客戶端,就不那么重要,因為COM是不支持重載的。

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>