Web服務(wù)描述語言(WSDL)_第1頁
Web服務(wù)描述語言(WSDL)_第2頁
Web服務(wù)描述語言(WSDL)_第3頁
Web服務(wù)描述語言(WSDL)_第4頁
Web服務(wù)描述語言(WSDL)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Web 服務(wù)描述語言 (WSDL) 1.02000年9月25日 作者(按姓氏字母順序排列): Erik Christensen,Microsoft Francisco Curbera,IBM Greg Meredith,Microsoft Sanjiva Weerawarana,IBM 版權(quán)所有© 2000 Ariba,International Business Machines Corporation,Microsoft摘要 WSDL 是一種 XML 格式,用于將網(wǎng)絡(luò)服務(wù)描述為一組端點(diǎn),這些端點(diǎn)對(duì)包含面向文檔信息或面向過程信息的消息進(jìn)行操作。這種格式首先對(duì)操作和消息進(jìn)行抽象描述,

2、然后將其綁定到具體的網(wǎng)絡(luò)協(xié)議和消息格式上以定義端點(diǎn)。相關(guān)的具體端點(diǎn)即組合成為抽象端點(diǎn)(服務(wù))。可以對(duì) WSDL 進(jìn)行擴(kuò)展,這樣無論通信時(shí)使用何種消息格式或網(wǎng)絡(luò)協(xié)議,都可以對(duì)端點(diǎn)及其消息進(jìn)行描述。但是,本文檔中所述的綁定只涉及有關(guān)如何將 WSDL 與 SOAP 1.1、HTTP GET/POST 和 MIME 一起使用的問題。此版本的 WSDL 語言尚處于初步階段,沒有提供框架來說明端點(diǎn)的撰寫過程。描述這些約定的完整框架應(yīng)包含撰寫服務(wù)的方式和表達(dá)服務(wù)行為的方式(即相應(yīng)的用于發(fā)送和接收消息的規(guī)則)。服務(wù)的撰寫應(yīng)滿足兩個(gè)要求:(1) 確保類型的安全性,(2) 允許在運(yùn)行時(shí)通過交換和綁定服務(wù)引用來傳遞

3、引用。后面的這一條對(duì)于在運(yùn)行期協(xié)商約定以及捕獲引用服務(wù)和代理服務(wù)的行為至關(guān)重要。WSDL 規(guī)范的作者希望及時(shí)發(fā)布 WSDL 的修訂版和/或一些附加文檔,包括:(1) 撰寫服務(wù)的框架;(2) 描述服務(wù)行為的框架。狀態(tài) 本草案介紹了 Ariba、IBM 和 Microsoft 當(dāng)前在服務(wù)描述方面的一些思路。它對(duì) NASSL、SCL 和 SDL(有關(guān)這方面的早期建議)中的一些概念進(jìn)行了整理合并。目錄 1. 簡(jiǎn)介 2. 服務(wù)定義 o 文檔結(jié)構(gòu) o 類型 o 消息 o 端口類型 o 綁定 o 端口 o 服務(wù) 3. SOAP 綁定 o SOAP 示例 o SOAP 綁定如何擴(kuò)展 WSDL o soap:b

4、inding o soap:operation o soap:body o soap:fault o soap:header o soap:address 4. HTTP GET 和 POST 綁定 o HTTP GET/POST 示例 o HTTP GET/POST 綁定如何擴(kuò)展 WSDL o http:address o http:binding o http:operation o http:urlEncoded o http:urlReplacement 5. MIME 綁定 o MIME 綁定示例 o MIME 綁定如何擴(kuò)展 WSDL o mime:content o mime:mu

5、ltipartRelated o soap:body o mime:mimeXml 6. 參考資料 o 有關(guān) URI 的說明 o WSDL 示例的線上格式 o 擴(kuò)展性元素的位置 o 架構(gòu) 簡(jiǎn)介 由于通信協(xié)議和消息格式在 Web 社區(qū)中已經(jīng)過標(biāo)準(zhǔn)化,因而有可能以某種結(jié)構(gòu)化的方式對(duì)通信加以描述,而且實(shí)現(xiàn)這一點(diǎn)也顯得日益重要。WSDL 定義了一種 XML 語法,將網(wǎng)絡(luò)服務(wù)描述為能夠進(jìn)行消息交換的通信端點(diǎn)的集合,從而滿足了這種需求。WSDL 服務(wù)定義為分布式系統(tǒng)提供了文檔,并且可用于自動(dòng)執(zhí)行應(yīng)用程序通信中所涉及的細(xì)節(jié)。WSDL 文檔將服務(wù)定義為網(wǎng)絡(luò)端點(diǎn)或端口的集合。在 WSDL 中,由于端點(diǎn)和消息的抽

6、象定義已從具體的網(wǎng)絡(luò)部署或數(shù)據(jù)格式綁定中分離出來,因此可以對(duì)抽象定義進(jìn)行再次使用:消息,指對(duì)交換數(shù)據(jù)的抽象描述;而端口類型,指操作的抽象集合。用于特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范構(gòu)成了可以再次使用的綁定。將網(wǎng)絡(luò)地址與可再次使用的綁定相關(guān)聯(lián),可以定義一個(gè)端口,而端口的集合則定義為服務(wù)。因此,WSDL 文檔在網(wǎng)絡(luò)服務(wù)的定義中使用下列元素:· Types - 數(shù)據(jù)類型定義的容器,它使用某種類型系統(tǒng)(如 XSD)。 · Message - 通信數(shù)據(jù)的抽象類型化定義。 · Operation - 對(duì)服務(wù)所支持的操作的抽象描述。 · Port Type - 操作

7、的抽象集合,這些操作由一個(gè)或多個(gè)端點(diǎn)支持。 · Binding - 特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范。 · Port - 定義為綁定和網(wǎng)絡(luò)地址組合的單個(gè)端點(diǎn)。 · Service - 相關(guān)端點(diǎn)的集合。 將在第二節(jié)中對(duì)這些元素進(jìn)行詳細(xì)說明。應(yīng)該注意的是,WSDL 并沒有引入新的類型定義語言。雖然 WSDL 知道,要描述消息格式需要豐富的類型系統(tǒng),并且它也支持“XML 架構(gòu)規(guī)范 (XSD)”作為其標(biāo)準(zhǔn)類型系統(tǒng),但是,由于不可能只用一種類型系統(tǒng)語法來描述現(xiàn)在和將來的所有消息格式,因此 WSDL 允許通過擴(kuò)展來使用其它類型定義語言。此外,WSDL 還定義了通用的綁定機(jī)

8、制。通過該機(jī)制可使特定的協(xié)議、數(shù)據(jù)格式或結(jié)構(gòu)與抽象的消息、操作或端點(diǎn)相關(guān)聯(lián)。該機(jī)制還允許對(duì)抽象定義進(jìn)行再次使用。雖然本文檔定義了上述語言擴(kuò)展,但這些擴(kuò)展均位于核心服務(wù)定義框架的上部。所以一定能將 WSDL 與其它綁定擴(kuò)展一起使用。WSDL 文檔示例 下例是一個(gè)提供股票報(bào)價(jià)的簡(jiǎn)單服務(wù)的 WSDL 定義。該服務(wù)支持名為 GetLastTradePrice 的單一操作,這個(gè)操作是通過在 HTTP 上運(yùn)行 SOAP 1.1 協(xié)議來實(shí)現(xiàn)的。該請(qǐng)求接受一個(gè)類型為字符串的 ticker 符號(hào),并返回類型為浮點(diǎn)數(shù)的價(jià)格。有關(guān)此定義中所用元素的詳細(xì)說明,請(qǐng)參見第 2 節(jié)(核心語言)和第 3 節(jié)(SOAP 綁定)

9、。示例 1 通過 HTTP 運(yùn)行的 SOAP 1.1 請(qǐng)求/響應(yīng)<?xml version="1.0"?><definitions name="StockQuote" targetNamespace="" xmlns:tns="" xmlns:xsd1="" xmlns:soap="" xmlns=""> <types> <schema targetNamespace="" xmlns=&quo

10、t;"> <element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all> </complexType> </element> <element name="TradePrice"> <complexType> <all> <el

11、ement name="price" type="float"/> </all> </complexType> </element> </schema> </types> <message name="GetLastTradePriceInput"> <part name="body" element="xsd1:TradePrice"/> </message> <message name

12、="GetLastTradePriceOutput"> <part name="body" element="xsd1:TradePriceResult"/> </message> <portType name="StockQuotePortType"> <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/&

13、gt; <output message="tns:GetLastTradePriceOutput"/> </operation> </portType> <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> <soap:binding style="document" transport=""/> <operation name="Get

14、LastTradePrice"> <soap:operation soapAction=""/> <input> <soap:body use="literal" namespace="" encodingStyle=""/> </input> <output> <soap:body use="literal" namespace="" encodingStyle=""/&g

15、t; </output> </operation> </binding> <service name="StockQuoteService"> <documentation>我的第一次服務(wù)</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location=""/> </port>

16、; </service> </definitions>標(biāo)記規(guī)則 1. 本文檔中的關(guān)鍵字“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”和“OPTIONAL”按照 RFC-2119中的說明進(jìn)行解釋。2. 本文檔中使用下列名稱空間前綴:前綴名稱空間 URI 定義wsdlWSDL 框架的 WSDL 名稱空間。httpHTTP GET 和 POST 綁定的 WSDL 名稱空間。mimeMIME 綁定的 WSDL 名稱空間。xsi由 XSD 定義的實(shí)

17、例名稱空間。xsd由 XSD 定義的架構(gòu)名稱空間。tns(多種)“this namespace”(tns) 是用于指當(dāng)前文檔的慣用前綴。(other)(多種)其它名稱空間前綴僅作為示例。其中,以“”開頭的 URI 代表某些與應(yīng)用程序相關(guān)或與上下文相關(guān)的 URI3. 此規(guī)范使用非正式語法來描述 WSDL 文檔的 XML 語法:· 語法以 XML 實(shí)例的形式出現(xiàn),但是值表示數(shù)據(jù)類型,而非實(shí)際值。 · 應(yīng)按如下方式將字符追加到元素和屬性后:“?”(0 或 1);“*”(0 或更多);“+”(1 或更多)。 · 以“”結(jié)尾的元素名稱(如 <element/>

18、或 <element>)表示省略與上下文無關(guān)的元素/屬性。 · 上文中尚未正式引入以粗體顯示的語法,或僅在某個(gè)特定示例中出現(xiàn)。 · <- extensibility element -> 是某些“other”名稱空間(如 XSD 中的 #other)中的元素占位符。 · 以上定義的 XML 名稱空間前綴用于表示所定義的元素的名稱空間。 · 以 <?xml 開頭的示例中包含足夠的信息,可以滿足本規(guī)范的要求,而其它示例則只是一些片段,需要指定其它信息才能滿足本規(guī)范的要求。 XSD 架構(gòu)是作為 WSDL 語法的正式定義提供的:服務(wù)

19、定義 本節(jié)介紹 WSDL 語言的核心元素。有關(guān) SOAP、HTTP 和 MIME 綁定擴(kuò)展的信息,請(qǐng)分別參見第 3 節(jié)、第 4 節(jié)和第 5 節(jié)。WSDL 文檔結(jié)構(gòu) WSDL 文檔實(shí)際上只是一個(gè)定義集。在根部有一個(gè) definitions 元素,其中包含一些定義。具體語法如下所示:<wsdl:definitions name="nmtoken"? targetNamespace="uri"?> <import namespace="uri" location="uri"/>* <wsdl

20、:documentation/> ? <wsdl:types> ? <wsdl:documentation/>? <xsd:schema/>* <- extensibility element -> * </wsdl:types> <wsdl:message name="nmtoken> * <wsdl:documentation/>? <part name="nmtoken" element="qname"? type="qname&qu

21、ot;?/> * </wsdl:message> <wsdl:portType name="nmtoken">* <wsdl:documentation/>? <wsdl:operation name="nmtoken">* <wsdl:documentation/> ? <wsdl:input name="nmtoken"? message="qname">? <wsdl:documentation/> ? </wsd

22、l:input> <wsdl:output name="nmtoken"? message="qname">? <wsdl:documentation/> ? </wsdl:output> <wsdl:fault name="nmtoken" message="qname"> * <wsdl:documentation/> ? </wsdl:fault> </wsdl:operation> </wsdl:portType

23、> <wsdl:binding name="nmtoken" type="qname">* <wsdl:documentation/>? <- extensibility element -> * <wsdl:operation name="nmtoken">* <wsdl:documentation/> ? <- extensibility element -> * <wsdl:input name="nmtoken"?>

24、? <wsdl:documentation/> ? <- extensibility element -> </wsdl:input> <wsdl:output name="nmtoken"?> ? <wsdl:documentation/> ? <- extensibility element -> * </wsdl:output> <wsdl:fault name="nmtoken"> * <wsdl:documentation/> ? <

25、;- extensibility element -> * </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="nmtoken"> * <wsdl:documentation/>? <wsdl:port name="nmtoken" binding="qname"> * <wsdl:documentation/> ? <- extensibility ele

26、ment -> </wsdl:port> <- extensibility element -> </wsdl:service> <- extensibility element -> * </wsdl:definitions>服務(wù)是使用以下五個(gè)主要元素來定義的:· types:提供用于描述所交換消息的數(shù)據(jù)類型定義。 · message:代表所傳輸數(shù)據(jù)的抽象定義。消息由一些邏輯片段構(gòu)成,每個(gè)邏輯片段分別與某個(gè)類型系統(tǒng)中的定義相關(guān)聯(lián)。 · portType:指抽象操作的集合。每個(gè)操作引用一條輸入消息和

27、一條輸出消息。 · binding:為由特定 portType 定義的操作和消息指定具體的協(xié)議和數(shù)據(jù)格式規(guī)范。 · port:為綁定指定一個(gè)地址,從而定義一個(gè)通信端點(diǎn)。 · service:用于聚合一組相關(guān)端口。 將在第 2.2 至 2.7 節(jié)中對(duì)這些元素進(jìn)行詳細(xì)說明。本節(jié)的其余部分將介紹 WSDL 中有關(guān)文檔命名、引用文檔定義、使用語言擴(kuò)展和添加上下文文檔等方面的規(guī)則。文檔命名和鏈接 可以為 WSDL 文檔分配一個(gè)類型為 NCNAME 的可選 name 屬性(該屬性將作為文檔的一種輕量級(jí)形式)。或者,也可以指定一個(gè)類型為 URI 的 targetNamespac

28、e 屬性。該 URI 不能是相對(duì) URI。 WSDL 允許使用 import 語句將名稱空間與文檔位置相關(guān)聯(lián): <definitions> <import namespace="uri" location="uri"/> *</definitions>WSDL 中的 QNames 解析方法與 XML 架構(gòu)規(guī)范中所述的 QNames 解析方法相似。使用 QName 可以創(chuàng)建對(duì) WSDL 定義的引用??梢砸?WSDL 文檔中的以下各類定義:· WSDL 定義:service、port、message、bindi

29、ngs 和 portType · 其它定義:如果通過擴(kuò)展添加了其它定義,這些定義應(yīng)使用 QName 鏈接。 上面列出的每種 WSDL 定義類型都有自己的名稱范圍(也就是說,端口名稱和消息名稱絕對(duì)不會(huì)發(fā)生沖突)。同一個(gè)名稱范圍內(nèi)的名稱在 WSDL 文檔中必須是唯一的。 撰寫樣式 使用 import 元素可以將服務(wù)定義的不同元素分別放入單獨(dú)的文檔中,需要時(shí)再將其導(dǎo)入。這種技術(shù)可以根據(jù)定義的抽象級(jí)別將其分開,這樣有助于編寫更為清晰的服務(wù)定義。使用這種技術(shù)還可以對(duì)各種服務(wù)定義進(jìn)行最大限度的再利用。因此,具有這種結(jié)構(gòu)的 WSDL 文檔更易于使用和維護(hù)。在示例 2 中,我們將定義分為數(shù)據(jù)類型定義

30、、抽象定義和特定服務(wù)綁定三類,并將其分別放入三個(gè)文檔中。當(dāng)然,這種機(jī)制的使用并不僅限于此例中明確出現(xiàn)的定義(這些定義只使用了本規(guī)范中所定義的語言元素),也可以使用類似的方式對(duì)基于其它語言擴(kuò)展的其它定義類型進(jìn)行編碼和再利用。示例 2. 示例 1 中所述服務(wù)的另一種撰寫樣式。<?xml version="1.0"?><schema targetNamespace="" xmlns=""> <element name="GetLastTradePrice"> <complexTy

31、pe> <all> <element name="tickerSymbol" type="string"/> </all> </complexType> </element> <element name="GetLastTradePriceResult"> <complexType> <all> <element name="result" type="float"/> </a

32、ll> </complexType> </element></schema><?xml version="1.0"?><definitions name="StockQuote" targetNamespace="" xmlns:tns="" xmlns:xsd1="" xmlns:soap="" xmlns=""> <import namespace="" loc

33、ation=""/> <message name="GetLastTradePriceRequest"> <part name="body"element="xsd1:GetLastTradePrice"/> </message> <message name="GetLastTradePriceResponse"> <part name="body"element="xsd1:GetLastTradePri

34、ceResult"/> </message> <portType name="StockQuotePortType"> <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceRequest"/> <output message="tns:GetLastTradePriceResponse"/> </operation> </por

35、tType></definitions><?xml version="1.0"?><definitions name="StockQuote" targetNamespace="" xmlns:tns="" xmlns:soap="" xmlns=""> <import namespace="" location=""/> <binding name="StockQu

36、oteSoapBinding" type="tns:StockQuotePortType"> <soap:binding style="document"/> <operation name="GetLastTradePrice"> <soap:operation soapAction=""/> </operation>> </binding> <service name="StockQuoteService"

37、;> <documentation>我的第一個(gè)服務(wù)</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location=""/> </port> </service></definitions> 語言的擴(kuò)展性和綁定 在 WSDL 中,術(shù)語“綁定”表示將協(xié)議或數(shù)據(jù)格式信息與某個(gè)抽象實(shí)體(如 message、operat

38、ion 或 portType 等)相關(guān)聯(lián)的過程。WSDL 允許將代表特定技術(shù)的元素(此處稱為擴(kuò)展性元素)放置在 WSDL 所定義的各種元素之下。這些可擴(kuò)展點(diǎn)通常用于指定特定協(xié)議或消息格式的綁定信息,但也可用于其它用途。擴(kuò)展性元素所用的 XML 名稱空間不能與 WSDL 的名稱空間相同。附錄 A3 中詳細(xì)說明了擴(kuò)展性元素可在文檔中的哪些位置出現(xiàn)。擴(kuò)展性元素通常用于指定某種特定技術(shù)的綁定。為了區(qū)分特定技術(shù)綁定的語義對(duì)通信是必需的還是可選的,可以在擴(kuò)展性元素上設(shè)置一個(gè)布爾型的 wsdl:required 屬性。該屬性的默認(rèn)值為假 (false)。定義該屬性的名稱空間為“”。有關(guān)擴(kuò)展性元素的示例,請(qǐng)參

39、見第 3 節(jié)、第 4 節(jié)和第 5 節(jié)。文檔 WSDL 使用可選的 wsdl:document 元素作為可閱讀文檔的容器。該元素的內(nèi)容可以是任意文本和元素(混雜在 XSD 中)。在所有 WSDL 語言元素中,都允許使用文檔元素。 類型 types 元素包含與交換的消息相關(guān)的數(shù)據(jù)類型定義。為了獲得最大程度的互操作性和平臺(tái)中立性,WSDL 選用 XSD 作為標(biāo)準(zhǔn)類型系統(tǒng),并將其當(dāng)作固有類型系統(tǒng)。<definitions> <types> <xsd:schema/>* </types></definitions>可以使用 XSD 類型系統(tǒng)來定

40、義消息中的類型,無論所得到的線上格式是否為 XML,也無論所得到的 XSD 架構(gòu)是否驗(yàn)證了該特定線上格式。如果同一消息具有多個(gè)綁定,或者雖然只有一個(gè)綁定,但該綁定類型的類型系統(tǒng)不通用,則會(huì)出現(xiàn)非常有趣的情況。在這種情況下,如果使用 XSD 對(duì)抽象類型進(jìn)行編碼,建議遵循下列原則:· 使用元素形式(不要使用屬性)。 · 不要使用對(duì)線上編碼非常特殊的屬性或元素(也就是說,與消息的抽象內(nèi)容無關(guān)的屬性或元素),例如,soap:root、soap:encodingStyle、xmi:id 和 xmi:name 等。 · 使用 Soap:Array 類型來為數(shù)組類型建模(無論最

41、終形式是否實(shí)際使用 SOAP 1.1 版文檔的第 5 節(jié)中指定的編碼方式)。使用 ArrayOfXXX 作為數(shù)組類型的名稱(其中,XXX 表示數(shù)組中項(xiàng)的類型)。 但是,由于不可能使用一種類型系統(tǒng)語法來描述現(xiàn)在和將來的所有抽象類型,因此,WSDL 允許通過擴(kuò)展性元素來添加類型系統(tǒng)。擴(kuò)展性元素可能出現(xiàn)在 types 元素之下,它標(biāo)識(shí)正在使用的類型定義系統(tǒng)并為類型定義提供 XML 容器元素。該元素的作用與 XML 架構(gòu)語言的 schema 元素的作用相似。<definitions> <types> <- type-system extensibility element

42、 -> * </types></definitions>消息 消息由一個(gè)或多個(gè)邏輯片段構(gòu)成。每個(gè)片段使用一個(gè)消息類型屬性與某個(gè)類型系統(tǒng)的類型相關(guān)聯(lián)。消息類型屬性的集合是可擴(kuò)展的。WSDL 定義了以下幾個(gè)消息類型屬性,與 XSD 一起使用:· element:使用 QName 引用一個(gè) XSD 元素。 · type:使用 QName 引用一個(gè) XSD simpleType 或 complexType。 如果使用的名稱空間與 WSDL 所用的名稱空間不同,還可以定義其它消息類型屬性。綁定擴(kuò)展性元素也可以使用消息類型屬性。定義消息的語法如下所示。其中

43、,消息類型屬性以粗體顯示(消息類型屬性因所用類型系統(tǒng)而異)。<definitions> <message name="nmtoken"> * <part name="nmtoken"? element="qname" type="qname"?/> * </message></definitions>消息 name 屬性所指定的名稱在其所在 WSDL 文檔定義的全部消息中是唯一的。 片段 name 屬性所指定的名稱在其所在消息的所有片段中是唯一的。消息片段

44、 片段是一種用于描述消息的邏輯抽象內(nèi)容的靈活機(jī)制。綁定可以引用片段的名稱來指定有關(guān)該片段的綁定專用信息。例如,如果定義用于 RPC 的消息,片段可以代表消息中的參數(shù)。但是,為了確定該片段的實(shí)際含義,必須對(duì)綁定進(jìn)行檢查。如果消息有多個(gè)邏輯單元,則使用多個(gè)片段元素。例如,以下消息包括“訂單”和“客戶”兩個(gè)片段元素。<definitions> <types> <schema> <element name="PO" type="tns:POType"/> <complexType name="POT

45、ype"> <element name="id" type="string/> <element name="name" type="string"/> <element name="items"> <complexType> <element name="item" type="tns:Item" minOccurs="0" maxOccurs="unbounded

46、"/> </complexType> </element> </complexType> <complexType name="Item"> <element name="quantity" type="int"/> <element name="product" type="string"/> </complexType> <element name="Customer"

47、; type="tns:CustomerType"/> <complexType name="CustomerType"> <element name="name" type="string"/> </complexType> </schema> </types> <message name="PO"> <part name="po" element="tns:PO"/&g

48、t; <part name="customer" element="tns:Customer"/> </message></definitions>但是,如果消息內(nèi)容十分復(fù)雜,則需要使用另一種語法,通過直接使用類型系統(tǒng)來指定消息的復(fù)合結(jié)構(gòu)。在下例中,主體是一個(gè)訂單或一組客戶。<definitions> <types> <schema> <complexType name="POType"> <element name="id"

49、 type="string/> <element name="name" type="string"/> <element name="items"> <complexType> <element name="item" type="tns:Item" minOccurs="0" maxOccurs="unbounded"/> </complexType> </element

50、> </complexType> <complexType name="Item"> <element name="quantity" type="int"/> <element name="product" type="string"/> </complexType> <complexType name="CustomerType"> <element name="name&quo

51、t; type="string"/> </complexType> <complexType name="Composite"> <choice> <element name="PO" minOccurs="1" maxOccurs="1" type="tns:POType"/> <element name="Customer" minOccurs="0" maxOccurs=

52、"unbounded" type="tns:CustomerType"/> </choice> </complexType> </schema> </types> <message name="PO"> <part name="composite" type="tns:Composite"/> </message></definitions>抽象消息與具體消息 消息定義始終被當(dāng)作消息內(nèi)容的抽象定

53、義。消息綁定描述如何將抽象內(nèi)容映射為具體的格式。但是,在某些情況下,抽象定義可能與一個(gè)或多個(gè)綁定的具體表示方式完全相符或十分接近,致使這些綁定不能提供任何映射信息或只能提供少量信息;而同一消息定義的另一個(gè)綁定可能需要大量的映射信息。因此,只有在對(duì)綁定進(jìn)行檢查之后,才能確定消息的實(shí)際“抽象程度”。端口類型 端口類型是一組指定的抽象操作,以及所涉及的抽象消息。<wsdl:definitions> <wsdl:portType name="nmtoken"> <wsdl:operation name="nmtoken"/>

54、* </wsdl:portType></wsdl:definitions>端口類型 name 屬性所指定的名稱在其所在 WSDL 文檔定義的所有端口類型中是唯一的。操作是通過 name 屬性來命名的。WSDL 提供以下四個(gè)可得到端點(diǎn)支持的傳輸原語:· 單向 (One-way):端點(diǎn)接收消息。 · 請(qǐng)求響應(yīng) (Request-response):端點(diǎn)接收消息,然后發(fā)送相關(guān)消息。 · 要求響應(yīng) (Solicit-response):端點(diǎn)發(fā)送消息,然后接收相關(guān)消息。 · 通知 (Notification):端點(diǎn)發(fā)送消息。 WSDL 稱這

55、些原語為操作。雖然可以使用兩條單向消息抽象地模擬請(qǐng)求/響應(yīng)或要求/響應(yīng),但是將其作為原語操作類型模型也很有用,因?yàn)椋?#183; 經(jīng)常需要使用這兩個(gè)操作。 · 可以使順序相互關(guān)聯(lián),而不必引入更為復(fù)雜的流信息。 · 某些端點(diǎn)可以只接收消息(如果它們是同步請(qǐng)求響應(yīng)的結(jié)果)。 · 需要流定義時(shí),可以通過算法從這些原語派生簡(jiǎn)單的流。 雖然請(qǐng)求/響應(yīng)或要求/響應(yīng)在 WSDL 文檔中是邏輯相關(guān)的,仍然有一個(gè)特定的綁定描述具體的相關(guān)信息。例如,請(qǐng)求消息和響應(yīng)消息可以作為一兩個(gè)實(shí)際網(wǎng)絡(luò)通信的一部分進(jìn)行交換。操作使用類型為 QName 的 message 屬性來引用所涉及的消息。該

56、屬性遵循 WSDL 為鏈接定義的規(guī)則。 單向操作 單向操作的語法是:<wsdl:definitions> <wsdl:portType> * <wsdl:operation name="nmtoken"> <wsdl:input name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType ></wsdl:definitions>input 元素指定單向操作的抽象消息格式。請(qǐng)求響

57、應(yīng)操作 請(qǐng)求響應(yīng)操作的語法是:<wsdl:definitions> <wsdl:portType> * <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:output name="nmtoken"? message="qname"/> <wsd

58、l:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType ></wsdl:definitions>input 元素和 output 元素分別指定請(qǐng)求和響應(yīng)的抽象消息格式??蛇x的 fault 元素為操作可能產(chǎn)生的錯(cuò)誤消息(協(xié)議所特有的除外)指定抽象消息格式。請(qǐng)注意,請(qǐng)求響應(yīng)操作是一個(gè)抽象的概念;必須查詢特定的綁定,才能確定消息的實(shí)際發(fā)送方式:是在同一個(gè)通信中發(fā)送(例如 HTTP 請(qǐng)求/響應(yīng)),還是作為兩個(gè)獨(dú)立的通信發(fā)送(例

59、如兩個(gè) HTTP 請(qǐng)求)。要求響應(yīng)操作 要求響應(yīng)操作的語法是:<wsdl:definitions> <wsdl:portType> * <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:input name="nmtoken"? message="qname&qu

60、ot;/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType ></wsdl:definitions>output 元素和 input 元素分別指定所要求的請(qǐng)求和響應(yīng)的抽象消息格式。可選的 fault 元素為操作可能產(chǎn)生的錯(cuò)誤消息(協(xié)議所特有的除外)指定抽象消息格式。請(qǐng)注意,請(qǐng)求響應(yīng)操作是一個(gè)抽象的概念;必須查詢特定的綁定,才能確定消息的實(shí)際發(fā)送方式:是在同一個(gè)通信中發(fā)送(例如 HTTP 請(qǐng)求

61、/響應(yīng)),還是作為兩個(gè)獨(dú)立的通信發(fā)送(例如兩個(gè) HTTP 請(qǐng)求)。通知操作 單向操作的語法是:<wsdl:definitions> <wsdl:portType> * <wsdl:operation name="nmtoken"> <wsdl:output name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType ></wsdl:definitions>output元素指定通知操作的抽象消息格式。操作中的元素名稱 inuput 元素和 output 元素的 name 屬性所指定的名稱在其所在端口類型的所有 input 元素和 output 元素中是唯一的。為了避免需要為操作中的每個(gè) input 元素和 output 元素指定名稱,WSDL 提供了一些以操作名稱為基礎(chǔ)的默認(rèn)值。如果未在單向

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論