<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> |
<xsd:attribute name="arrayType" type="xsd:string"/> |
<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> |
<?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); |
<?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> |