<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0

    通過(guò) GET 訪問服務(wù)

    在 SOAP 1.2 推出之前,使用 HTTP 訪問基于 SOAP 的 Web 服務(wù)的唯一方法是使用 POST 請(qǐng)求。您將需要?jiǎng)?chuàng)建能創(chuàng)建 POST 請(qǐng)求并使用 SOAP 消息作為請(qǐng)求的內(nèi)容的客戶機(jī)。不過(guò),SOAP 1.2 定義了使用 GET 請(qǐng)求訪問基于 SOA 的 Web 服務(wù)的方法。

    GET 與 POST 對(duì)比

    繼續(xù)我們的討論之前,務(wù)必了解通過(guò) HTTP 的 GETPOST 請(qǐng)求的區(qū)別。盡管很多 Web 程序員所進(jìn)行的處理似乎表明二者之間是可以互換的,但實(shí)際上二者的用途并不相同。GET 中的所有關(guān)于所請(qǐng)求的資源的信息都包含在 URL(通常作為參數(shù)),僅用于等冪請(qǐng)求。這些請(qǐng)求是沒有“副作用”的請(qǐng)求。也就是說(shuō),應(yīng)該能夠數(shù)十次、數(shù)百次、數(shù)千次地調(diào)用這個(gè)請(qǐng)求,但這個(gè)請(qǐng)求不會(huì)更改任何東西。例如,請(qǐng)求 Albuquerque 的當(dāng)前氣溫的 Web 請(qǐng)求就是等冪請(qǐng)求。而將注釋傳入到博客數(shù)據(jù)庫(kù)的 Web 請(qǐng)求則不是。

    這是因?yàn)?GET 請(qǐng)求可以添加到用戶的書簽,能在不會(huì)引發(fā)警告的情況下進(jìn)行訪問。還可以對(duì)其進(jìn)行引用,而不會(huì)引發(fā)警告。另一方面,POST 請(qǐng)求將其信息包含在請(qǐng)求的正文中,因此很難進(jìn)行隨機(jī)的重復(fù)。

    就 SOAP 而言,這意味著應(yīng)該能夠?qū)H檢索信息而不進(jìn)行更改的 SOAP 請(qǐng)求使用 GET。對(duì)于進(jìn)行更改的任何操作,仍然都應(yīng)使用 POST





    回頁(yè)首


    訪問服務(wù)

    在 Axis2 中,可以生成 GET 請(qǐng)求,服務(wù)器會(huì)將其轉(zhuǎn)換為 SOAP 消息,然后將有效負(fù)載作為結(jié)果返回。例如,請(qǐng)將瀏覽器指向清單 31 中所示的位置。


    清單 31. 訪問服務(wù)
                        
    http://localhost:8080/axis2/services/CMSService/getNumberOfArticles?category=classifieds
    

    如果使用 0.94 版,將看到清單 32 中所示的響應(yīng)。


    清單 31. SOAP 有效負(fù)載響應(yīng)
                        
    <resp:numberOfArcticles>42</resp:numberOfArcticles>
    

    不過(guò),這并不十分準(zhǔn)確。根據(jù) SOAP 1.2 建議規(guī)范,應(yīng)該能夠看到整個(gè) SOAP 響應(yīng)。這在 Axis2 將來(lái)的版本中可能會(huì)發(fā)生更改。





    回頁(yè)首

    處理附件

    簡(jiǎn)單 SOAP 消息的另一個(gè)變體是附件。對(duì)于附件,多年來(lái)人們?cè)缫讯炷茉敚捎诂F(xiàn)在某些擴(kuò)展規(guī)范要求使用附件,因此您必須對(duì)其進(jìn)行處理。

    二進(jìn)制數(shù)據(jù)和 XML

    盡管 XML 是基于文本的格式,但卻不能忽略實(shí)際上是采用二進(jìn)制進(jìn)行表示的。因?yàn)檫@樣,將會(huì)有需要向 Web 服務(wù)傳遞或從其檢索二進(jìn)制信息的情況。

    可以采用兩種方式中的一種來(lái)處理這種情況。第一種選擇是將二進(jìn)制數(shù)據(jù)實(shí)際包含在您的文檔中。這種情況的一個(gè)例子是將 Microsoft Word 文檔另存為 XML 文件時(shí)。如果在該文檔中嵌入了任何圖形,Word 會(huì)將其作為二進(jìn)制數(shù)據(jù)嵌入到 XML 文檔中(采用 Base64 編碼)。第二種選擇是直接引用該數(shù)據(jù),以便處理該文檔的應(yīng)用程序能夠找到此數(shù)據(jù)。一個(gè)極為常見的例子是 Web 瀏覽器以及其處理從 XHTML 文件引用的圖像的方式。XHTML 文本包含一個(gè) img 元素(或者,采用了更為先進(jìn)的技術(shù),則為 object 元素),該元素包含一個(gè) src 屬性,其中有指向?qū)嶋H數(shù)據(jù)的 URL。應(yīng)用程序可以隨后從該位置加載數(shù)據(jù)并相應(yīng)地進(jìn)行使用。

    SOAP 文檔也是這樣。假如,如果向基于 SOAP 的服務(wù)提交了一個(gè)圖像,有兩個(gè)選擇。可以將該數(shù)據(jù)嵌入在有效負(fù)載中,或可以想辦法引用該數(shù)據(jù)。曾經(jīng)由于涉及到帶寬的一些問題對(duì)此進(jìn)行過(guò)討論。





    回頁(yè)首


    XML 二進(jìn)制優(yōu)化打包

    XML 已經(jīng)比二進(jìn)制對(duì)應(yīng)項(xiàng)冗長(zhǎng)得多了。正因?yàn)槿绱耍鼘⑹褂酶嗟膸挕D敲矗?dāng)考慮使用向 XML 文本文檔添加二進(jìn)制數(shù)據(jù)時(shí)的首選方法(將其編碼為 Base64)時(shí),會(huì)由于兩個(gè)或更多的因素而導(dǎo)致其尺寸增大,這就帶來(lái)了一個(gè)非常實(shí)際的問題。

    事實(shí)上,在過(guò)去的兩三年,曾經(jīng)有很多人強(qiáng)烈地批評(píng)缺乏對(duì)二進(jìn)制數(shù)據(jù)的實(shí)時(shí)支持,幾乎充斥著不滿的聲音,最終 W3C 開始著手處理這個(gè)問題。其工作的成果就是 XML 二進(jìn)制優(yōu)化打包(XML-binary Optimized Packages,XOP)。此協(xié)議提供了在 XML 文檔中可靠地引用外部數(shù)據(jù)的方法。例如,SOAP with Attachments 規(guī)范規(guī)定二進(jìn)制數(shù)據(jù)可以作為多部分 MIME 文檔的的一部分發(fā)送,由 XML 數(shù)據(jù)組成第一部分,而二進(jìn)制數(shù)據(jù)作為附加部分添加到其中。這樣做的問題在于,盡管您的程序可能知道數(shù)據(jù)存在,但文檔并不知道這一點(diǎn)。同時(shí),還不允許對(duì)文檔進(jìn)行選擇性優(yōu)化或?qū)ΠM(jìn)制數(shù)據(jù)的現(xiàn)有文檔進(jìn)行回溯處理。

    XOP 通過(guò)提供一個(gè)特殊的機(jī)制來(lái)改進(jìn)這種情況,利用這種機(jī)制可選擇性地提取要優(yōu)化的信息,將其添加到多部分 MIME 消息中(其中也包括您的 SOAP 消息)并顯式地對(duì)其進(jìn)行引用。讓我們看一個(gè)例子。

    例如,假定員工不想將新文章作為文本元素添加,而希望將其作為二進(jìn)制文檔從字處理程序添加。如果將該內(nèi)容包含在消息體中,將十分混亂,如清單 33 中所示:_


    清單 33. 添加二進(jìn)制文檔
                        
    <?xml version='1.0' ?>
    <env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> 
     <env:Header>
     </env:Header>
     <env:Body>
      <cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">
        <cms:category>classifieds</category>
        <cms:subcategory>forsale
    </cms:subcategory>
        <cms:articleHeadline><cms:articleHeadline>
        <cms:articleText>wvetwenptiubnweoirntuwopeirt4m[456n09ew7nv
    sa0tv043u6y304o5mu60ew9rebtm45bm4-69nw-0er9utnv3094nb-26204
    95u6-49kv6-m34956h-wb09emjb-0n67u-340v,=qw-enr7w8b64b03278-
    ANDLOTSMOREBASE64ENCODEDDATAHERE</cms:articleText>
      </cms:addArticle>
     </env:Body>
    </env:Envelope>
    

    相反,XOP 規(guī)定對(duì)數(shù)據(jù)進(jìn)行提取,然后使用一個(gè)引用其新位置的 Include 元素將其替換,如清單 34 中所示。


    清單 34. 使用 XOP
                        
    MIME-Version: 1.0
    Content-Type: Multipart/Related;boundary=MIME_boundary;
        type="application/xop+xml";
        start="<soapmsg.xml@daily-moon.com>";
        start-info="text/xml"
    Content-Description: An XML document with binary data in it
    
    --MIME_boundary
    Content-Type: application/xop+xml; 
        charset=UTF-8; 
        type="text/xml"
    Content-Transfer-Encoding: 8bit
    Content-ID: <soapmsg.xml@daily-moon.com>
    
    <env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> 
     <env:Header>
     </env:Header>
     <env:Body>
      <cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">
        <cms:category>classifieds</category>
        <cms:subcategory>forsale
    </cms:subcategory>
        <cms:articleHeadline><cms:articleHeadline>
        <cms:articleText><xop:Include 
      xmlns:xop='http://www.w3.org/2004/08/xop/include' 
      href='cid:http://daily-moon.com/tbird.doc'
    /></cms:articleText>
      </cms:addArticle>
     </env:Body>
    </env:Envelope>
    
    --MIME_boundary
    Content-Type: application/vnd.oasis.openoffice
    Content-Transfer-Encoding: binary
    Content-ID: <http://daily-moon.com/tbird.doc>
    
    // binary octets for the word processing file
    
    --MIME_boundary--
    

    請(qǐng)注意,Include 元素中指定的位置與 Content-ID 減去協(xié)議 cid: 的值匹配。現(xiàn)在要發(fā)送的是此消息,而不是純文本 SOAP 消息。





    回頁(yè)首


    SOAP、二進(jìn)制數(shù)據(jù)和 Axis2

    在 SOAP 文檔中使用 XOP 的過(guò)程稱為 MTOM(即 SOAP 消息傳輸優(yōu)化機(jī)制——Message Transmission Optimization Mechanism)。Axis2 提供了使用 SOA 數(shù)據(jù)的這個(gè)方法的支持,但必須確保對(duì)應(yīng)用程序進(jìn)行了恰當(dāng)配置。

    具體來(lái)說(shuō),您必須在 axis2.war 文件內(nèi)的 axis2.xml 文件中啟用此支持(請(qǐng)參見清單 35)。


    清單 35. 將 XOP 與 Axis2 一起使用
                        
    <axisconfig name="AxisJava2.0">
        <!-- ================================================= -->
        <!-- Parameters -->
        <!-- ================================================= -->
        <parameter name="hotdeployment" locked="false">true</parameter>
        <parameter name="hotupdate" locked="false">true</parameter>
        <parameter name="enableMTOM" locked="false">true</parameter>
     
        <!-- Uncomment this to enable REST support -->
        <!--    <parameter name="enableREST" locked="false">true</parameter>-->
    
        <parameter name="userName" locked="false">admin</parameter>
        <parameter name="password" locked="false">axis2</parameter>
    ...
    

    如果有必要,可以提取 axis2.war 文件,進(jìn)行此更改,然后將其重新壓縮成 .war 文件。

    要替換 Axis2 應(yīng)用程序,請(qǐng)使用清單 36 中所示的 URL 訪問 Geronimo 控制臺(tái)。


    清單 36. Geronimo 控制臺(tái)
                        
    http://localhost:8080/console
    

    作為 system/manager 登錄,并單擊 Application>Web App WARs,然后卸載并重新安裝 Axis2 應(yīng)用程序。(請(qǐng)記住,執(zhí)行此步驟后,必須重新加載 Web 服務(wù)。)

    以編程方式使用 MTOM 不在本教程的討論范圍之內(nèi),但可以在參考資料部分獲取有關(guān)此主題的更多信息。只是要注意,在 Axis2 的 0.95 版之前的版本上可能不會(huì)按照預(yù)期工作,因?yàn)樵摪姹局邪?SOAP with Attachments API for Java (SAAJ) 實(shí)現(xiàn)。





    回頁(yè)首

    結(jié)束語(yǔ)

    在系統(tǒng)間的互操作性非常重要的當(dāng)今世界,可將 Web 服務(wù)視為面向服務(wù)的體系結(jié)構(gòu)的基礎(chǔ)。而 SOAP 則是企業(yè)級(jí) Web 服務(wù)的基礎(chǔ)。本教程介紹了 Web 服務(wù)的基礎(chǔ)知識(shí),并對(duì)了解和在自己的應(yīng)用程序中使用 SOAP 所必需的概念和編程知識(shí)進(jìn)行了說(shuō)明。在本教程中,您了解了以下內(nèi)容:

    • 有關(guān) Web 服務(wù)的重要概念
    • 如何安裝和使用 Geronimo 應(yīng)用服務(wù)器
    • 如何安裝和使用 Axis2 Web 服務(wù)應(yīng)用程序
    • 如何創(chuàng)建客戶機(jī)來(lái)訪問 SOAP 服務(wù)
    • 如何創(chuàng)建 SOAP 服務(wù)
    • 有關(guān) SOAP 服務(wù)的其他問題,如 GET 請(qǐng)求和附件

    在本系列的第 2 將討論 Web 服務(wù)描述語(yǔ)言,您將從中學(xué)習(xí)如何使用 WSDL 來(lái)實(shí)現(xiàn)在本文中執(zhí)行的很多步驟的自動(dòng)化,并提供更便于其他人訪問您構(gòu)建的服務(wù)的方法。





    回頁(yè)首

    下載

    描述 名字 大小 下載方法
    Source code ws-understand-web-services1.zip 12KB HTTP
    關(guān)于下載方法的信息 Get Adobe? Reader?

    參考資料

    學(xué)習(xí)

    獲得產(chǎn)品和技術(shù)
    • 此處下載 Apache Geronimo。

    • 此處下載 Apache Axis2。本教程使用的是 0.94 版,但應(yīng)該也能使用更高版本。

    • 此處下載 J2SE SDK。




    回頁(yè)首

    關(guān)于作者

    Nicholas Chase 曾參與多家公司的網(wǎng)站開發(fā)工作,如 Lucent Technologies、Sun Microsystems、Oracle 和 Tampa Bay Buccaneers。Nick 擔(dān)任過(guò)高中物理教師、低輻射廢料處理設(shè)施管理員、在線科幻小說(shuō)雜志編輯、多媒體工程師、Oracle 講師以及一家交互通信公司的首席技術(shù)官。他已經(jīng)出版了多本圖書,其中包括 XML Primer Plus (Sams)。


    posted on 2006-12-29 18:49 SIMONE 閱讀(565) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV无码久久| 精品一区二区三区无码免费直播| 波多野结衣免费在线| 亚洲精品久久久久无码AV片软件| 亚洲精品综合久久| 国产高清不卡免费视频| 亚洲国产欧洲综合997久久| 亚洲中文字幕伊人久久无码| 久久www免费人成看片| 美女被吸屁股免费网站| 亚洲好看的理论片电影| 国产一区二区视频免费| 日本免费一区二区三区| 亚洲精品无码不卡在线播放| 亚洲AV中文无码乱人伦下载| 暖暖在线日本免费中文| 免费在线看黄网站| 青娱乐在线视频免费观看| 亚洲电影免费观看| 国产专区一va亚洲v天堂| 成年在线观看免费人视频草莓| 两个人的视频www免费| 亚洲爆乳少妇无码激情| 久久久久亚洲AV成人无码| 免费人成在线观看网站视频| 四虎成年永久免费网站| 三级网站在线免费观看| 美景之屋4在线未删减免费| 亚洲精品视频在线观看视频| 久久精品国产亚洲Aⅴ香蕉| 成人片黄网站A毛片免费| 免费污视频在线观看| CAOPORM国产精品视频免费| 亚洲综合色一区二区三区| 色噜噜综合亚洲av中文无码| 久久久久久A亚洲欧洲AV冫| 免费网站看v片在线香蕉| 色se01短视频永久免费| 日韩午夜理论免费TV影院| 国产自国产自愉自愉免费24区| 国产精品久久亚洲一区二区|