WSDL语法
? 2.2 定義
? ?這type元素分裝了與交換信息先關的類型定義。為了最大的 獨立和平臺的自然,WSDL更喜歡使用XSD作為同一的類型系統。
? ?<definitions...>
? ? ? ? ? ?<types>
? ? ? ? ? ? ? ? ? ? <xsd:schema../>
? ? ? ? ? ?</types>
? ?</definitions>
這XSD類型系統能夠被用來定義在消息中的類型忽略是否導致有限實際上是XML,或者是否導致XSD schema沿著特別的有線格式。如果有多重的綁定到同樣的消息它是非常有趣的,或者如果有一個綁定但是那個綁定類型并沒有一個類型系統在廣泛的使用。在這些例子中,這推薦的方法對于編碼抽象的 類型使用XSD如下:
? ? ? ? ?使用元素格式
? ? ? ? ?不要包含屬性或者與在線編碼的元素。
? ? ? ? ? 數組類型應該擴展數據組的定義。使用ArrayOfXXX對于數組類型。數組中項的類型和數組的域通過使用一個默認的子soappenc:arrayType屬性來指定。在寫這是,這XSD的標準并沒一個集中來指定默認指(刨幺一個QName指的屬性)。為了克服這個限制,WSDL
<definitions .... ><message name="nmtoken"> *<part name="nmtoken" element="qname"? type="qname"?/> *</message> </definitions> 2.3.1 消息部分
?分部分是一個靈活的機制來描述邏輯抽象的內容。一個綁定可能引用一部分為了指定特指綁定的消息關于這部分,例如,如果定義一個消息使用RPC,一個部分可能代表一個參數在這消息。然而,綁定必需被偵查為了定義這師姐意義的部分。
? ? 2.3.2 抽象和示例化消息的對比
? 消息定義總被認為是一個抽象消息內容。一個消息綁定描述了這抽象的內容如何被映射到一個具體的格式。然而,在一下情形下,這抽象的定義可能匹配這具體的非常進步或恰當對于一個或更多綁定,所以這些綁定將提供很像映射的消息。然而,其他的綁定同一消息定義可能需要擴展的映射消息。對于這個理由,它知道綁定被這次。
? ? 2.3 端口類型
?一個端口類型是抽象操作和抽象消息的集合。
? <wsdl:definitions....>
? ? ? ?<wsdl:portType name="nmtoken">
? ? ? ? ? ? ? ? <wsdl:operation name="nmtoken"..../>
? ? ? ? </wsdl:portType>
</wsdl:definitions>
這端口類型名字屬性提供了一個唯一的名字。
WSDL提供四中傳遞原語:
? ?One-way:終端節點接受消息。
? ?Request-response。終端節點接受一個消息,和發出一個相關消息。
? ?Solicit-response。終端發出一個消息,和接受一個相關消息。
? ?notification。終端節點發出一個消息。
WSDL把這些原語當做操作。盡管request/response或者solicit/response能夠被抽象的模塊化使用兩種one-way消息,但是它是有用的模塊化作為原語操作類型因為:
? ? ?他們是相同的。
? ? ?他們的序列能夠被相關的沒有已經更加輔助的流消息。
? ? ?一下終端節點僅僅接受消息如果他們是異步請求響應。
? ? 一個簡單流能夠被獲得從這些原語當流定義被需要的。
2.4.1 one-way操作
? ?<wsdl:definitions...> <wsdl:portType...>
? ? ? <wsdl:operation name="nmtoken">
? ? ? ? ? ? ?<wsdl:input name="nmtoken"? message="qname".>
? ? ? </wsdl:operation>
? </wsdl:definitions>
這輸入元素指定了抽象的消息格式對于one-way操作。
2.4.2 request-response操作
<wsdl:definitions .... ><wsdl:portType .... > *<wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:input name="nmtoken"? message="qname"/><wsdl:output name="nmtoken"? message="qname"/><wsdl:fault name="nmtoken" message="qname"/>*</wsdl:operation></wsdl:portType > </wsdl:definitions> 2.4.3 Solicit-response操作
<wsdl:definitions .... ><wsdl:portType .... > *<wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:input name="nmtoken"? message="qname"/><wsdl:output name="nmtoken"? message="qname"/><wsdl:fault name="nmtoken" message="qname"/>*</wsdl:operation></wsdl:portType > </wsdl:definitions> ? 2.4.4 通知的操作
這對于通知操作的語法是:
? ? ?<wsdl:definitions...>
? ? ? ? ?<wsdl:portType....>
? ? ? ? ? ? ? ? ? ?<wsdl:operation name="nmtoken">
? ? ? ? ? ? ? ? ? ? ? ? ? ?<wsdl:output name="nmtoken"? message="qname"/>
? ? ? ? ? ? ? ? ? </wsdl:operation>
? ?</wsdl:porttype>
</wsdl:definitions>
2.4.5 一個操作屬性的名字
?輸入和輸出元素的名字屬性必需是唯一的。
?為了避免必需為每個輸入和輸出員命名,WSDL提供一下默認的支持基于這操作的名字。如果這名字屬性沒被指定為一個one-way或者notification消息,它默認這操作的名字。
? ?2.4.6 參數的序列在一個操作中
? 操作沒有指定是否他們被使用RPC-like綁定。然而,當使用一個操作RPC綁定,它是有用的來捕捉這元素的RPC函數簽名。為了這個理由,一個request-response或者solicit-response操作可能指定參數列表的順序通過parameterOrder屬性。這屬性的值如下。
? ? ? 這部分名字順序反應了在RPC簽名參數的順序。
? ? ? 這返回值的部分并不在列表中。
? ? ? 如果一個部分的名字出現在輸入和輸出消息,它是一個in/out參數。
? ? ?如果一個部分名字出現在僅僅的輸入消息,它是一個in參數。
? ? 乳溝一個部分名字出現僅僅輸出,它是一個out參數
?
2.5 綁定
一個綁定定義了消息格式和端口細節為了操作和消息定義有一個特別的portType。有可能任何數量的綁定對于一個給定的端口類型。這個語法對于一一個綁定。
<wsdl:definitions .... > <wsdl:binding name="nmtoken" type="qname"> *<-- extensibility element (1) --> *<wsdl:operation name="nmtoken"> *<-- extensibility element (2) --> *<wsdl:input name="nmtoken"? > ?<-- extensibility element (3) --> </wsdl:input><wsdl:output name="nmtoken"? > ?<-- extensibility element (4) --> *</wsdl:output><wsdl:fault name="nmtoken"> *<-- extensibility element (5) --> *</wsdl:fault></wsdl:operation></wsdl:binding> </wsdl:definitions> 這名字屬性提供了一個唯一的名字在所有的綁定定義在一個封裝的WSDL文檔。
一個綁定的引用這端口類 型,它綁定使用這類型屬性。這QName值戒指連接軌跡被定義通過WSDL。
一個綁定必需指定一個端口。
一個綁定不必須指定地址消息。
2.6端口
一個端口的定義一個單獨的終端節點通過指定一個單獨的地址來綁定。
? ?<wsdl:definitions...>
? ? ? ?<wsdl:service....>
? ? ? ? ? ?<wsdl:port name='nmtoken' binding='qname'>
? ? ? ? </wsdl:port>
? ? </wsdl:service>
</wsdl:definitions>
這個名字屬性提供了一個獨特的名字在所有的定義在這封閉的wsdl文檔。
這綁定屬性參照這綁定使用倆句規則被動。
一個端口禁止指定超過一個地址。
一個端口禁止指定綁定消息,而是地址消息。
2.7 Services
? 一個服務是和一套相關的端口:
? <wsdl:definitions....>
? ? ? <wsdl:service name="nmtoken">
? ? ? ? ? ? ? <wsdl:port..../>*
? ? ? ? ?</wsdl:service>
</wsdl:definitions>
這名字屬性提供了一個唯一的名字在所有的服務中。
在一個服務中的端口有一下關系:
? ? 沒有任何一個端口和其他相互通信。
? ? ?如果一個服務有幾個段分享一個端口類型,但是擁有不同的綁定或地址,這些端口是可選的。每個端口提供語言相等的行為。這運行一個WSDL文檔的使用者來選擇特別的端口來和基于一下規則來通信。
? ? 通過檢查它的端口,我們能夠決定一個服務的端口類型。這運行一個WSDL的使用來決定是否它希望來和一個特定的服務來通信無論它支持集中端口類型。這是有用如果有在這些。必需為了完成特定的任務。
??
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: WSDL uDDI
- 下一篇: WSDL SOAP 绑定