開發webservice之前要先看一眼什麼是webservice,并且了解一下webservice的概念。
l soap 指簡易對象通路協定
l soap 是一種通信協定
l soap 用于應用程式之間的通信
l soap 是一種用于發送消息的格式
l soap 被設計用來通過網際網路進行通信
l soap 獨立于平台
l soap 獨立于語言
l soap 基于 xml
l soap 很簡單并可擴充
l soap 允許您繞過防火牆
l soap 将被作為 w3c 标準來發展
l soap 消息必須用 xml 來編碼
l soap 消息必須使用 soap envelope 命名空間
l soap 消息必須使用 soap encoding 命名空間
l soap 消息不能包含 dtd 引用
l soap 消息不能包含 xml 處理指令
soap envelope元素是soap的根元素,是必需元素; soap header是可選元素可包含有關 soap 消息的應用程式專用資訊(比如認證、支付等)。如果 header 元素被提供,則它必須是 envelope 元素的第一個子元素。soap body 元素是必需的可包含打算傳送到消息最終端點的實際 soap 消息。soap 的 fault 元素,用于訓示錯誤消息。如果已提供了 fault 元素,則它必須是 body 元素的子元素。在一條 soap 消息中,fault 元素隻能出現一次。
wsdl 簡介
什麼是 wsdl?
wsdl 指網絡服務描述語言
wsdl 使用 xml 編寫
wsdl 是一種 xml 文檔
wsdl 用于描述網絡服務
wsdl 也可用于定位網絡服務
wsdl 還不是 w3c 标準
wsdl 可描述網絡服務(web services)
wsdl 指網絡服務描述語言 (web services description language)。
wsdl 是一種使用 xml 編寫的文檔。這種文檔可描述某個 web service。它可規定服務的位置,以及此服務提供的操作(或方法)。
在 w3c 的 wsdl 發展史
在 2001 年 3 月,wsdl 1.1 被 ibm、微軟作為一個 w3c 紀錄(w3c note)送出到有關 xml 協定的 w3c xml 活動,用于描述網絡服務。
(w3c 紀錄僅供讨論。一項 w3c 紀錄的釋出并不代表它已被 w3c 或 w3c 團隊亦或任何 w3c 成員認可。)
在 2002 年 7 月,w3c 釋出了第一個 wsdl 1.2 工作草案。
wsdl 文檔僅僅是一個簡單的 xml 文檔。
它包含一系列描述某個 web service 的定義。
wsdl 文檔結構
wsdl 文檔是利用這些主要的元素來描述某個 web service 的:
元素
定義
<porttype>
web service 執行的操作
<message>
web service 使用的消息
<types>
web service 使用的資料類型
<binding>
web service 使用的通信協定
一個 wsdl 文檔的主要結構是類似這樣的:
<definitions>
definition of types........
</types>
definition of a message....
</message>
definition of a port.......
</porttype>
definition of a binding....
</binding>
</definitions>
wsdl 文檔可包含其它的元素,比如 extension 元素,以及一個 service 元素,此元素可把若幹個 web services 的定義組合在一個單一的 wsdl 文檔中。
wsdl 端口
<porttype> 元素是最重要的 wsdl 元素。
它可描述一個 web service、可被執行的操作,以及相關的消息。
可以把 <porttype> 元素比作傳統程式設計語言中的一個函數庫(或一個子產品、或一個類)。
wsdl 消息
<message> 元素定義一個操作的資料元素。
每個消息均由一個或多個部件組成。可以把這些部件比作傳統程式設計語言中一個函數調用的參數。
wsdl types
<types> 元素定義 web service 使用的資料類型。
為了最大程度的平台中立性,wsdl 使用 xml schema 文法來定義資料類型。
wsdl bindings
<binding> 元素為每個端口定義消息格式和協定細節。
wsdl 執行個體
這是某個 wsdl 文檔的簡化的片段:
<message name="gettermrequest">
<part name="term" type="xs:string"/>
<message name="gettermresponse">
<part name="value" type="xs:string"/>
<porttype name="glossaryterms">
<operation name="getterm">
<input message="gettermrequest"/>
<output message="gettermresponse"/>
</operation>
在這個例子中,<porttype> 元素把 "glossaryterms" 定義為某個端口的名稱,把 "getterm" 定義為某個操作的名稱。
操作 "getterm" 擁有一個名為 "gettermrequest" 的輸入消息,以及一個名為 "gettermresponse" 的輸出消息。
<message> 元素可定義每個消息的部件,以及相關聯的資料類型。
對比傳統的程式設計,glossaryterms 是一個函數庫,而 "getterm" 是帶有輸入參數 "gettermrequest" 和傳回參數 gettermresponse 的一個函數。
wsdl 端口可描述由某個 web service 提供的界面(合法操作)。
端口定義了指向某個 web service 的連接配接點。可以把該元素比作傳統程式設計語言中的一個函數庫(或一個子產品、或一個類),而把每個操作比作傳統程式設計語言中的一個函數。
操作類型
請求-響應是最普通的操作類型,不過 wsdl 定義了四種類型:
類型
one-way
此操作可接受消息,但不會傳回響應。
request-response
此操作可接受一個請求并會傳回一個響應
solicit-response
此操作可發送一個請求,并會等待一個響應。
notification
此操作可發送一條消息,但不會等待響應。
one-way 操作
一個 one-way 操作的例子:
<message name="newtermvalues">
<operation name="setterm">
<input name="newterm" message="newtermvalues"/>
</porttype >
在這個例子中,端口 "glossaryterms" 定義了一個名為 "setterm" 的 one-way 操作。
這個 "setterm" 操作可接受新術語表項目消息的輸入,這些消息使用一條名為 "newtermvalues" 的消息,此消息帶有輸入參數 "term" 和 "value"。不過,沒有為這個操作定義任何輸出。
request-response 操作
一個 request-response 操作的例子:
在這個例子中,端口 "glossaryterms" 定義了一個名為 "getterm" 的 request-response 操作。
"getterm" 操作會請求一個名為 "gettermrequest" 的輸入消息,此消息帶有一個名為 "term" 的參數,并将傳回一個名為 "gettermresponse" 的輸出消息,此消息帶有一個名為 "value" 的參數。
wsdl 綁定可為 web service 定義消息格式和協定細節。
綁定到 soap
一個 請求 - 響應 操作的例子:
<part name="term" type="xs:string" />
<part name="value" type="xs:string" />
<input message="gettermrequest" />
<output message="gettermresponse" />
<binding type="glossaryterms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation
soapaction="http://example.com/getterm" />
<input>
<soap:body use="literal" />
</input>
<output>
</output>
binding 元素有兩個屬性 - name 屬性和 type 屬性。
name 屬性定義 binding 的名稱,而 type 屬性指向用于 binding 的端口,在這個例子中是 "glossaryterms" 端口。
soap:binding 元素有兩個屬性 - style 屬性和 transport 屬性。
style 屬性可取值 "rpc" 或 "document"。在這個例子中我們使用 document。transport 屬性定義了要使用的 soap 協定。在這個例子中我們使用 http。
operation 元素定義了每個端口提供的操作符。
對于每個操作,相應的 soap 行為都需要被定義。同時您必須如何對輸入和輸出進行編碼。在這個例子中我們使用了 "literal"。
uddi 是一種目錄服務,企業可以使用它對 web services 進行注冊和搜尋。
uddi,英文為 "universal description, discovery and integration",可譯為“通用描述、發現與內建服務”。
什麼是 uddi?
uddi 是一個獨立于平台的架構,用于通過使用 internet 來描述服務,發現企業,并對企業服務進行內建。
uddi 指的是通用描述、發現與內建服務
uddi 是一種用于存儲有關 web services 的資訊的目錄。
uddi 是一種由 wsdl 描述的 web services 界面的目錄。
uddi 經由 soap 進行通信
uddi 被建構入了微軟的 .net 平台
uddi 基于什麼?
uddi 使用 w3c 和 ietf* 的網際網路标準,比如 xml、http 和 dns 協定。
uddi 使用 wsdl 來描述到達 web services 的界面
此外,通過采用 soap,還可以實作跨平台的程式設計特性,大家知道,soap 是 xml 的協定通信規範,可在 w3c 的網站找到相關的資訊。
*注釋:ietf - internet engineering task force
uddi 的好處
任何規模的行業或企業都能得益于 uddi。
在 uddi 之前,還不存在一種 internet 标準,可以供企業為它們的企業和夥伴提供有關其産品和服務的資訊。也不存在一種方法,來內建到彼此的系統和程序中。
uddi 規範幫助我們解決的問題:
使得在成百萬目前線上的企業中發現正确的企業成為可能
定義一旦首選的企業被發現後如何啟動商業
擴充新客戶并增加對目前客戶的通路
擴充銷售并延伸市場範圍
滿足使用者驅動的需要,為在全球 internet 經濟中快速合作的促進來清除障礙
uddi 如何被使用
假如行業釋出了一個用于航班比率檢測和預訂的 uddi 标準,航空公司就可以把它們的服務注冊到一個 uddi 目錄中。然後旅行社就能夠搜尋這個 uddi 目錄以找到航空公司預訂界面。當此界面被找到後,旅行社就能夠立即與此服務進行通信,這樣由于它使用了一套定義良好的預訂界面。
誰在支援 uddi?
uddi 是一個跨行業的研究項目,由所有主要的平台和軟體提供商驅動,比如:dell, fujitsu, hp, hitachi, ibm, intel, microsoft, oracle, sap, 以及 sun, 它既是一個市場經營者的團體,也是一個電子商務的上司者。
已有數百家公司參與了這個 uddi 團體。
描述于 w3c 工作草案的完整 wsdl 1.2 文法已列在下面:
有了以上的一些知識你就可以對wsdl 有了一個非常深入的了解了,其實wsdl本身非常的簡單,接下下我們就可以利用wsdl語言定義接口然後進行開發了。