<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • SOAP Web服務(wù)介紹

    時(shí)間:2024-10-31 02:54:17 Web Services 我要投稿
    • 相關(guān)推薦

    SOAP Web服務(wù)介紹

      當(dāng)今最為常見(jiàn)的兩種 Web 服務(wù)類型分別是: REST 和 SOAP 。不過(guò),從趨勢(shì)來(lái)看,越來(lái)越多人已經(jīng)開(kāi)始使用 REST 風(fēng)格的 Web 服務(wù)。而 SOAP 大多也開(kāi)始或已經(jīng)轉(zhuǎn)型 REST,應(yīng)該說(shuō) REST 會(huì)慢慢成為主流。這篇文章不會(huì)對(duì) REST 介紹太多,主要的重點(diǎn)還是介紹一下 SOAP 風(fēng)格的 Web 服務(wù)。

      Web Service 三要素

      實(shí)際上,現(xiàn)在說(shuō) “Web Service 三要素”應(yīng)該是不算很準(zhǔn)確了,不過(guò)這個(gè)概念一直這樣沿用,而且本文我們?yōu)榱烁芮宄U釋 SOAP Web 服務(wù),那么就這樣定義。

      Web Service 的三個(gè)要素分別是:

      SOAP(Simple Object Access Protoco) 簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議;

      WSDL(Web Services Description Language) 網(wǎng)絡(luò)服務(wù)描述語(yǔ)言;

      UDDI(Universal Description Discovery and Integration)一個(gè)用來(lái)發(fā)布和搜索 WEB 服務(wù)的協(xié)議(非必須);

      SOAP 用來(lái)描述傳遞信息的格式規(guī)范, WSDL 用來(lái)描述如何訪問(wèn)具體的接口(比如它會(huì)告訴你該服務(wù)有哪些接口可以使用,參數(shù)是什么等等), UDDI 用來(lái)管理、分發(fā)和查詢 Web Service。下面我們將逐一詳細(xì)介紹這三個(gè)要素,并通過(guò)結(jié)合實(shí)例來(lái)進(jìn)行闡釋。

      為了把這三個(gè)要素說(shuō)得更清楚,我們將會(huì)使用一個(gè)免費(fèi)的 SOAP Web 服務(wù)作為例子進(jìn)行闡述。該服務(wù)只提供一個(gè)接口即:根據(jù) QQ 號(hào),獲取 QQ 在線狀態(tài)。查看該服務(wù)

      SOAP

      它是一個(gè)協(xié)議,可以簡(jiǎn)單的理解為:它定義了一個(gè)基于 XML 的可擴(kuò)展消息信封格式。因?yàn)榭蛻舳伺c服務(wù)器進(jìn)行交互,由于大家的平臺(tái)和應(yīng)用程序都不一樣,所以大家約定都采用 SOAP 這個(gè)協(xié)議來(lái)規(guī)范交互時(shí)的需要傳遞的消息。

      請(qǐng)求接口時(shí),發(fā)送的消息例子:

      <?xml version="1.0" encoding="utf-8"?>

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

      <soap:Body>

      <qqCheckOnline xmlns="http://WebXml.com.cn/">

      <qqCode>8698053</qqCode>

      </qqCheckOnline>

      </soap:Body>

      </soap:Envelope>

      接口響應(yīng)時(shí),返回的消息例子:

      <?xml version="1.0" encoding="utf-8"?>

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

      <soap:Body>

      <qqCheckOnlineResponse xmlns="http://WebXml.com.cn/">

      <qqCheckOnlineResult>Y</qqCheckOnlineResult>

      </qqCheckOnlineResponse>

      </soap:Body>

      </soap:Envelope>

      注:以上例子是使用 SOAP 1.1 發(fā)送的消息,SOAP 1.2 發(fā)送的消息格式其實(shí)大同小異,具體自己查看接口文檔。

      下面對(duì)它結(jié)構(gòu)進(jìn)行詳細(xì)說(shuō)明。

      XML 聲明

      <?xml version="1.0" encoding="utf-8"?>

      該行是 XML 聲明。它定義 XML 的版本 (1.0) 和所使用的編碼(utf-8)。

      Envelope 元素

      <soap:Envelope

      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:xsd="http://www.w3.org/2001/XMLSchema">

      ....

      </soap:Envelope>

      Envelope 元素是 SOAP 消息的固定根元素,SOAP 協(xié)議規(guī)定的,不能變,其中 xmlns 是 XML Namespace 的縮寫(xiě),表示 XML 命名空間。xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 是 Envelope的一個(gè)屬性,它表示定義個(gè)以soap 為前綴的命名空間 http://schemas.xmlsoap.org/soap/envelope/,即命名空間的名字是:http://schemas.xmlsoap.org/soap/envelope/,而它的前綴是 soap,這樣子就把 soap 前綴與該命名空間進(jìn)行了綁定。即任何用 soap 為前綴的元素都屬于該命名空間的,包括根元素 Envelope 。舉個(gè)例子:

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

      <soap:Body>

      <qqCheckOnline xmlns="http://WebXml.com.cn/">

      <qqCode>8698053</qqCode>

      </qqCheckOnline>

      </soap:Body>

      </soap:Envelope>

      其中,Envelope 和 Body 元素就是以 soap 為前綴的,那么 Envelope 和 Body 元素都是屬于http://schemas.xmlsoap.org/soap/envelope/ 這個(gè)命名空間的。

      同時(shí),SOAP 協(xié)議中規(guī)定,SOAP 消息必須使用 SOAP Envelope 命名空間,所以http://schemas.xmlsoap.org/soap/envelope/ 這個(gè)命名空間是固定的不能變(注意:這里只針對(duì) SOAP 1.1 版本,SOAP 1.2 會(huì)有所不同)。所有 SOAP 消息元素,比如:Envelope、Header、Body、Fault 也都必須屬于該命名空間。

      Body 元素

      <soap:Body>

      <qqCheckOnline xmlns="http://WebXml.com.cn/">

      <qqCode>8698053</qqCode>

      </qqCheckOnline>

      </soap:Body>

      Body 元素里面,一般都是放一些請(qǐng)求和響應(yīng)的內(nèi)容。qqCheckOnline 表示要調(diào)用的接口方法,而 qqCode 就是調(diào)用該方法時(shí),傳入的參數(shù),當(dāng)然參數(shù)可以有多個(gè)。

      其中,qqCheckOnline 元素上也定義了一個(gè)命名空間 http://WebXml.com.cn/。值得注意的是,這里在定義命名空間時(shí),并沒(méi)有設(shè)置命名空間前綴(namespace prefix)。這種設(shè)置方式,會(huì)把當(dāng)前元素及其所有子元素,都?xì)w屬于該命名空間。了解 XML 命名空間。

      我們看到,SOAP 消息元素和應(yīng)用程序本身的元素是屬于不同的命名空間,這樣有利于把 SOAP 消息元素與其他元素區(qū)分開(kāi)來(lái),當(dāng)然也防止了與自定義元素重名的問(wèn)題。

      Header 元素

      <?xml version="1.0" encoding="utf-8"?>

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

      <soap:Header>

      <AuthenHeader xmlns="http://www.example.com">

      <sAuthenticate>string</sAuthenticate>

      </AuthenHeader>

      </soap:Header>

      <soap:Body>

      ......

      </soap:Body>

      </soap:Envelope>

      有些接口需要提供 Header 元素,它和 Body 信息一起發(fā)送,它一般用于身份驗(yàn)證等作用。例子中的 AuthenHeader 和sAuthenticate 都是接口自定義的參數(shù)。

      Fault 元素

      當(dāng)調(diào)用服務(wù)發(fā)生錯(cuò)誤時(shí),錯(cuò)誤信息一般會(huì)被放置在 Fault 元素內(nèi)。例如:

      <?xml version="1.0" encoding="utf-8"?>

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

      <soap:Body>

      <soap:Fault>

      <faultcode>soap:Client</faultcode>

      <faultstring>Input string was not in a correct format.</faultstring>

      <detail/>

      </soap:Fault>

      </soap:Body>

      </soap:Envelope>

      Fault 元素內(nèi)還有 faultcode、faultstring、detail,用于描述錯(cuò)誤信息用的。在上一篇文章:《SOAP 介紹》中已經(jīng)對(duì)該知識(shí)點(diǎn)進(jìn)行了比較詳細(xì)的說(shuō)明,有興趣可以看看。

      WSDL

      一個(gè) XML 格式的文檔。它用于描述該服務(wù)有哪些可用方法、參數(shù)的數(shù)據(jù)類型、命名空間等等信息。它的目的是讓你知道該如何使用該服務(wù),包括調(diào)用的各種細(xì)節(jié)信息。WSDL 文檔通常用來(lái)輔助生成服務(wù)器和客戶端代碼及配置信息。

      契約先行與代碼先行模式

      在開(kāi)發(fā) Web Service 過(guò)程中有兩種實(shí)現(xiàn)模式:契約先行(Contract first)模式和代碼先行(Code first)模式。

      契約先行模式:首要工作是定義針對(duì)這個(gè) Web 服務(wù)的接口的 WSDL(Web Services Description Language,Web 服務(wù)描述語(yǔ)言 ) 文件。WSDL 文件中描述了 Web 服務(wù)的位置,可提供的操作集,以及其他一些屬性。WSDL 文件也就是 Web 服務(wù)的 “契約”。“契約” 訂立之后,再據(jù)此進(jìn)行服務(wù)器端和客戶端的應(yīng)用程序開(kāi)發(fā)。

      代碼先行模式:與契約先行模式不同,代碼先行模式中,第一步工作是實(shí)現(xiàn) Web 服務(wù)端,然后根據(jù)服務(wù)端的實(shí)現(xiàn),用某種方法(自動(dòng)生成或手工編寫(xiě))生成 WSDL 文件。

      實(shí)際上,一個(gè) WSDL 文件也挺復(fù)雜的,一般自己也不會(huì)去直接看這個(gè)文件,而是需要用到某個(gè)方法時(shí),直接看該方法的調(diào)用說(shuō)明就好。比如:獲得騰訊QQ在線狀態(tài)

      UDDI

      UDDI 是一個(gè)專門用來(lái)管理 Web 服務(wù)的地方。Web Service 服務(wù)提供商可以通過(guò)兩種方式來(lái)暴露它的 WSDL 文件地址:

      注冊(cè)到 UDDI 服務(wù)器,以便被人查找;

      直接告訴給客戶端調(diào)用者;

      是否需要注冊(cè)到 UDDI 實(shí)際上是可選的,一般公司內(nèi)部使用的服務(wù),也不會(huì)注冊(cè)到 UDDI。只有那些希望所有人都知道該服務(wù)的地址,才會(huì)注冊(cè)到 UDDI。

      最后

      這篇文章寫(xiě)得有點(diǎn)亂了,主要還是自己對(duì) SOAP 的了解還不夠,最起碼我并沒(méi)有真正開(kāi)發(fā)過(guò) SOAP 服務(wù)。不過(guò)沒(méi)關(guān)系吧,慢慢來(lái),文章可以隨著知識(shí)的增長(zhǎng)慢慢潤(rùn)色。上文其實(shí)有一些問(wèn)題沒(méi)有說(shuō)清楚的,比如說(shuō):SOAP 服務(wù)的適合用在哪里,不適合用在哪里等等。如果你有興趣,可以看看文章最后的幾篇參考文獻(xiàn)。

    【SOAP Web服務(wù)介紹】相關(guān)文章:

    SOAP語(yǔ)法07-06

    Windows 2003的Web服務(wù)器配置方法介紹07-19

    關(guān)于網(wǎng)格與Web服務(wù)的結(jié)合09-30

    Web服務(wù)中的異常處理09-17

    安裝Web服務(wù)器07-16

    教你制作iPhone的SOAP應(yīng)用07-25

    WEB服務(wù)器的優(yōu)化方法10-30

    Web服務(wù)器常規(guī)維護(hù)10-16

    關(guān)于web個(gè)人介紹的范文10-11

    java實(shí)現(xiàn)web服務(wù)器的方法10-14

    主站蜘蛛池模板: 91麻豆精品国产91久久久久久| 精品国产热久久久福利| 精品国产一区二区三区久久蜜臀| 无码人妻精品一区二区三区66| 国产成人精品久久亚洲高清不卡 | 精品国产三级a在线观看| 亚洲精品二三区| 国产日韩久久久精品影院首页 | 99精品久久精品一区二区| 亚洲韩精品欧美一区二区三区| 精品少妇一区二区三区在线| 成人精品一区二区三区在线观看| 国产精品免费大片| 老司机亚洲精品影院| 亚洲处破女AV日韩精品| 亚洲精品国产va在线观看蜜芽| 久久久久亚洲精品天堂久久久久久| 国产成人精品在线观看| 91探花国产综合在线精品| 久久96国产精品久久久| 国产伦精品一区二区三区女| 91国在线啪精品一区| 99热亚洲色精品国产88| 国精品午夜福利视频不卡| 日韩精品乱码AV一区二区| 中文字幕乱码中文乱码51精品| 婷婷国产成人精品一区二| 免费精品国自产拍在线播放| 精品国产青草久久久久福利| 九九线精品视频在线观看| 久久精品国产精品亚洲人人| 久久久久无码精品| 三级国产精品| 亚洲中文字幕久久精品无码APP| 亚洲精品tv久久久久| 亚洲动漫精品无码av天堂| 久久婷婷国产综合精品| 国产欧美日韩精品a在线观看| 国产精品亚洲A∨天堂不卡| 99精品热这里只有精品| 免费欧美精品a在线|