国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

WSDL文件詳解(轉(zhuǎn)貼)下

2024-07-21 02:21:33
字體:
供稿:網(wǎng)友

在本文寫作時,並無任何 soap 實作,能進(jìn)行作業(yè)名稱的多載動作。這對使用 java 的客戶端是很重要的,因為使用 java 的伺服端所使用的介面,會利用 java 的多載功能。但這對使用 com 的客戶端倒無所謂,因為 com 並不支援多載。

<binding> 與 <operation> 元素
binding 區(qū)段是,指定通訊協(xié)定、序列化、與編碼的地方。若 types、messages、與 porttype 等區(qū)段負(fù)責(zé)抽象的資料內(nèi)容,那麼 binding 區(qū)段便負(fù)責(zé)處理資料傳輸?shù)木唧w細(xì)節(jié)。binding 區(qū)段負(fù)責(zé)使前三個區(qū)段的抽象具體化。

將繫結(jié)規(guī)格從資料與訊息宣告中分離出來的意義是,執(zhí)行相同業(yè)務(wù)的服務(wù)提供者,可將一組作業(yè) (porttype) 標(biāo)準(zhǔn)化。若欲凸顯自身的差異,每個提供者可另外提供自訂繫結(jié)。讓 wsdl 擁有匯入 construct 是有好處的;因為如此一來,即可遠(yuǎn)離 bindings 與 services 區(qū)段,將抽象定義置於自身的檔案中;並可將其散佈於服務(wù)提供者間,讓他們把抽象定義設(shè)定成標(biāo)準(zhǔn)。例如,銀行可標(biāo)準(zhǔn)化,一組抽象 wsdl 文件詳盡說明的銀行作業(yè)。但每家銀行還是可以自由地,「自訂」基礎(chǔ)通訊協(xié)定、序列最佳化、與編碼。

下列為 binding 區(qū)段的 wsdl 多載範(fàn)例,於此重複以方便詳細(xì)討論:

<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"/>
<input name="foo1">
<soap: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>

<binding> 元素會有個名稱 (本例中為「foosamplebinding」),以方便 services 區(qū)段的 <port> 元素參照。它有個參照 <porttype> 的「type」屬性,在本例中為「wsdlns:foosampleporttype」。第二行是 mstk2 擴(kuò)充元素 <stk:binding>,它可指定 preferredencoding,或稱「utf-8」。

<soap:binding> 元素可指定,使用的樣式 (rpc) 與傳輸。傳輸屬性會參照命名空間,以確定所使用的 http soap 通訊協(xié)定。

有兩個 <operation> 元素具有相同的名稱「foo」。這兩個作業(yè)不同之處在於,兩個不同的 <input> 名稱:「foo1」與「foo2」。在兩個 <operation> 元素中,<soap:operation> 元素的「soapaction」屬性皆相同,都是一個 uri。soapaction 屬性是 soap 專屬的 uri,並逐字依 soap 訊息使用。以此方式取得的 soap 訊息,會有個 soapaction 標(biāo)頭;而且還會以 <soap:operation> 元素中的 uri 為其值。雖然 http 繫結(jié)需要 soapaction 屬性,但非 http 繫結(jié)則不用。本文刊出時,其用途仍然不明。就本範(fàn)例而言,它似乎可用來區(qū)別兩個不同的「foo」作業(yè)。soap 1.1 宣稱,soapaction 可用來識別訊息的「目的 (intent)」。它更建議伺服端,可用此屬性路由訊息,而不用剖析整個訊息。實務(wù)上,其用途差異很大。<soap:operation> 元素也可以含另一個名為「style」的屬性;若特定作業(yè)需要覆寫 <soap:binding> 元素中所指定的樣式,則可使用此屬性。

<operation> 元素所含的 <input>、<output>、與 <fault> 元素,可對應(yīng) porttypes 區(qū)段的相同元素。在上例中出現(xiàn)的只有 <input> 元素。在本例中,這三個元素都各有一個選擇性的「name」屬性,可用以區(qū)別名稱相同的作業(yè)。在範(fàn)例的 <input> 元素中,有個 <soap:body> 元素,它可指定輸入結(jié)果 soap 訊息之 <body> 的內(nèi)容。此元素有下列屬性:

use
它是用以指定資料採「編碼 (encoded)」或「常值 (literal)」。「常值」的意義是,結(jié)果 soap 訊息所含資料的格式,完全依照抽象定義 (types、messages、與 porttypes 區(qū)段) 的指定規(guī)格 。「編碼」的意義是,「encodingstyle」屬性 (參考下文) 會指定編碼方式。
namespace
每個 soap 訊息的主體,都有自己的命名空間,以防止名稱衝突。此屬性所指定的 uri,會逐字使用於結(jié)果 soap 訊息之中。
encodingstyle
以 soap 的編碼方式而言,uri 的值應(yīng)該是「http://schemas.xmlsoap.org/soap/encoding」。
文件樣式繫結(jié)
在上一區(qū)段中,<soap:binding> 元素有個類型屬性被設(shè)定成「rpc」。若將此屬性設(shè)定成「document」,即可改變訊息在線上的排序。此時這些訊息便成了文件傳輸,而不再是函數(shù)簽章。在此繫結(jié)類型中,<message> 元素是定義文件格式,而非函數(shù)簽章。請參考下例中的 wsdl 片段:

<definitions
xmlns:stns="(schematns)"
xmlns:wtns="(wsdltns)"
targetnamespace="(wsdltns)">

<schema targetnamespace="(schematns)"
elementformdefault="qualified">
<element name="simpleelement" type="xsd:int"/>
<element name="compositelement" type="stns:compositetype"/>
<complextype name="compositetype">
<all>
<element name='a' type="xsd:int"/>
<element name='b' type="xsd:string"/>
</all>
</complextype>
</schema>

<message...>
<part name='p1' type="stns:compositetype"/>
<part name='p2' type="xsd:int"/>
<part name='p3' element="stns:simpleelement"/>
<part name='p4' element="stns:compositeelement"/>
</message>
?</definitions>

此結(jié)構(gòu)描述有 simpleelement 與 compositeelement 兩個元素,以及一個宣告類型 (compositetype)。所宣告的唯一 <message> 元素有四個部分 (part):p1 是 compositetype 類型;p2 是 int 類型;p3 是 simpleelement;而 p4 是 compositeelement。下表是四種繫結(jié)的比較,依照「使用/類型」分別為:rpc/literal、document/literal、rpc/encoded、與 document/encoded。本表可說明,每種繫結(jié)方式反映在線上的實際情況。

rpc / literal
<operation name="method1" style="rpc" ...>
<input>
<soap:body parts="p1 p2 p3 p4"
use="literal"
namespace="(messagens)"/>
</input>
</operation>

線上情形:
<soapenv:body... xmlns:mns="(messagens)"
xmlns:stns="(schematns)">
<mns:method1>
<mns:p1>
<stns:a>123</stns:a>
<stns:b>hello</stns:b>
</mns:p1>
<mns:p2>123</mns:p2>
<mns:p3>

<stns:simpleelement>

123

</stns:simpleelement>
</mns:p3>
<mns:p4>
<stns:compositeelement>
<stns:a>123</stns:a>
<stns:b>hello</stns:b>
</stns:compositeelement>
</mns:p4>
</mns:method1>
</soapenv:body>
document / literal / type=
<operation name="method1"
style="document" ...>
<input>
<soap:body parts="p1" use="literal">
</input>
</operation>

線上情形:

<soapenv:body... xmlns:stns="(schematns)">
<stns:a>123</stns:a>
<stns:b>hello</stns:b>
</soapenv:body>

rpc / encoded
<operation name="method1" style="rpc" ...>
<input>
<soap:body parts="p1 p2" use="encoded"
encoding=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace="(messagens)"/>
</input>
</operation>

線上情形:
<soapenv:body... xmlns:mns="(messagens)">
<mns:method1>
<p1 target="_self" href="#1"/>
<p2>123</p2>
</mns:method1>
<mns:compositetype id="#1">
<a>123</a>
<b>hello</b>
</mns:compositetype>
</soapenv:body>
document / literal / element=
<operation name="method1"
style="document" ...>
<input>
<soap:body parts="p3 p4"

use="literal">
</input>
</operation>

線上情形:

<soapenv:body... xmlns:stns="(schematns)">
<stns:simpleelement>

123

</stns:simpleelement>
<stns:compositeelement>
<stns:a>123</stns:a>
<stns:b>hello</stns:b>
</stns:compositeelement>
</soapenv:body>

document / encoded
<operation name="method1"
style="document" ...>
<input>
<soap:body parts="p1 p2" use="encoded"
encoding=

"http://schemas.xmlsoap.org/soap/encoding/"
namespace="(messagens)"/>
</input>
</operation>

線上情形:
<soapenv:body... xmlns:mns="(messagens)">
<mns:compositetype>
<a>123</a>
<b>hello</b>
</mns:compositetype>
<soapenc:int>123</soapenc:int>
</soapenv:body>


<service> 與 <port> 元素
服務(wù)即是一組 <port> 元素。每個 <port> 元素,都以一對一的方式,關(guān)連一個位置與 <binding>。若有一個以上的 <port> 元素,與相同的 <binding> 關(guān)連,便可以使用其它 url 作為替換。

在 wsdl 文件中,可以有一個以上的 <service> 元素。多個 <service> 元素,可以有許多用途。其中之一便是,根據(jù) url 的目的地,將傳輸埠群組化。因此,我只要使用另一個 <service>,就可以重新導(dǎo)向所有股票報價要求;而且我的客戶端程式依然可以正常運作,這是因為在這類的服務(wù)群組化中,通訊協(xié)定完全不會更動其它的服務(wù)。多個 <service> 服務(wù)的另一個用途是為了,根據(jù)基礎(chǔ)通訊協(xié)定,對傳輸埠進(jìn)行分類。例如,可將所有的 http 傳輸埠,置於一個 <service>;所有的 smtp 傳輸埠置於另一個 <service>??蛻舳吮憧筛鶕?jù)它能處理的通訊協(xié)定,搜尋相對的 <service>。

<service name="fooservice">
<port name="foosampleport" binding="foosamplebinding">
<soap:address
location="http://carlos:8080/fooservice/foo.asp"/>
</port>
</service>

在一份 wsdl 文件中,<service> 的「name」屬性,可區(qū)分出個別服務(wù)的不同。因為一個服務(wù)可能會有幾個傳輸埠,所以傳輸埠也必須有「name」屬性。

總結(jié)
本文已經(jīng)說明了 wsdl 文件最顯著的 soap 特色。但應(yīng)該聲明的是,wsdl 絕不僅只能在 http 上說明 soap 而已。在說明 soap 上,wsdl 的表達(dá)能力絕對足以使用 http-post、http-get、smtp、與其它通訊協(xié)定。只要使用 wsdl,不論是程式開發(fā)人員或一般使用者,都可輕鬆處理 soap。個人深信,wsdl 與 soap 的結(jié)合,將可引進(jìn)全新的應(yīng)用程式類別,以更徹底地利用各種網(wǎng)路服務(wù)。

在 wsdl 的命名空間,有各種 xml 元素。下表整理了這些元素、屬性、與內(nèi)容,以供參考:

元素 屬性 內(nèi)容 (子項)
<definitions> name
targetnamespace
xmlns (其它命名空間) <types>
<message>
<porttype>
<binding>
<service>
<types> (無) <xsd:schema>
<message> name <part>
<porttype> name <operation>
<binding> name
type <operation>
<service> name <port>
<part> name
type (空值)
<operation> name
parameterorder <input>
<output>
<fault>
<input> name
message (空值)
<output> name
message (空值)
<fault> name

message (空值)
<port> name
binding <soap:address>

資源:
wsdl 1.1
soap 1.1
xml 結(jié)構(gòu)描述入門
ms soap toolkit 下載網(wǎng)站
idl 至 wsdl 的轉(zhuǎn)譯工具
含 wsdl 至 vb 之 proxy 產(chǎn)生器的免費網(wǎng)路資源
pocketsoap:soap 之相關(guān)元件、工具、與原始程式碼
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临夏县| 旺苍县| 八宿县| 兴化市| 祁连县| 高清| 河北省| 长丰县| 沅陵县| 沁源县| 宽甸| 南江县| 抚州市| 高碑店市| 新营市| 班戈县| 鱼台县| 阳信县| 紫云| 浦江县| 汽车| 宣城市| 铜梁县| 土默特左旗| 子洲县| 收藏| 娱乐| 聂拉木县| 麻阳| 和龙市| 西吉县| 玛纳斯县| 唐山市| 治多县| 江川县| 广东省| 绥滨县| 河南省| 凤山县| 昆山市| 贵港市|