監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關閉

Web服務內幕,第3部分:Apache和Microsoft -- 良好的合作

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

Web服務內幕,第3部分:Apache和Microsoft -- 良好的合作

-- SOAP 互操作性就將來臨


James Snell (
jasnell@us.ibm.com)

軟件工程師,Emerging Technologies,IBM

2001 年 5 月

在“Web 服務內幕”的這個部分中,James Snell 通過演示使用 Microsoft SOAP 工具包 Beta 2 獲得 Apache 基于 SOAP 的 Web 服務是如此的輕松,表明 Apache 和 Microsoft 可以很好地合作。

Web 服務的概念終于開始為人們所接受。但當您嘗試著去實現(xiàn)它時,重要的是不要忘記,無論是開發(fā)平臺還是編程語言,無縫跨平臺互操作性是這項技術的推動力。如果您不把互操作性的問題確定下來,各種 SOAP 和 Web 服務實現(xiàn)都將在進行信息傳遞的時候遇到故障。Web 服務則會成為又一個失敗的試驗。

IBM、Microsoft 和 Apache

許多人可能都知道,去年春天 IBM 和 Microsoft 都發(fā)行了實現(xiàn) SOAP 的第一批版本。(后來 IBM 把它的代碼給了 Apache,啟動了現(xiàn)在的 Apache SOAP 項目計劃。)但是,盡管市場上所有有關 SOAP 的著作都承諾其平臺互操作性,但工具卻并不能提供這一點。在 SOAP 實現(xiàn)方式中有很多錯誤和細微差別,使得兩種工具間幾乎不能傳遞信息。但情況正開始改變。由于 Apache SOAP 項目和 Microsoft 兩方面成員所作的一致努力,互操作性已成為一個中心議題。很多最初的問題已經消失,遺留的少數(shù)不兼容問題也正被快速而順利地解決。

請注意:為了試驗這里的兩個示例,您需要下載最新版 Apache SOAP (2.1 版) 和 Microsoft SOAP 工具包 (Beta 2 或以上)。請參閱參考資料。

互操作性 -- xsi:type 屬性的問題

如果閱讀過 developerWorks 上其他討論 Web 服務體系結構的文章,那么您一定很熟悉以下的示意圖及其代表的含義。(如您沒有閱讀過這些文章,我強烈建議您上圖書館看一看。)

圖 1: Web 服務體系結構的基本組件


圖 1 代表 Web 服務體系結構的三個基本組件所執(zhí)行的三個基本操作:

服務提供者通過在服務代理者那里注冊來配置和發(fā)布服務;

服務請求者通過查找服務代理者那里的被發(fā)布服務登記記錄來找到服務;

服務請求者綁定服務提供者并使用可用的服務。

在 Web 服務的世界里,三個操作都包含三個受到稱贊的、和截然不同的技術:

發(fā)布的服務使用“通用描述、發(fā)現(xiàn)和集成(UDDI) API”;

查找服務使用 UDDI 和 Web 服務描述語言的組合(WSDL);

綁定服務處理 WSDL 和簡單對象訪問協(xié)議(SOAP)。

從最基礎的層次上來看,綁定操作是三者中最重要的。它包含服務的實際使用,這也是發(fā)生大多數(shù)互操作性問題的地方。簡單地說,是服務提供者和服務請求者對 SOAP 規(guī)范的全力支持解決了這些問題,并實現(xiàn)了無縫互操作性。

不幸的是,這個簡單的解決方案聽起來容易實現(xiàn),但實際上卻難得多。SOAP 的許多可選組件形成的靈活性、及其固有的綜合單一性使得我們在嘗試實現(xiàn)它時會受到挫折。舉個例子,Microsoft 和 Apache SOAP 工具包間產生的 xsi:type 屬性沖突是個惱人的小問題,它可以導致一段時間內工具間互操作性的完全中斷。

不要忘記,根據 SOAP 規(guī)范,一個信封中包含的各個元素可能選擇性地使用 xsi:type 屬性來識別其包含的數(shù)據類型。如果服務提供者和請求者有一些其它方式來傳遞此信息,則它不必被包含在信封中。 xsi:type 只有當無其它方式傳遞這些數(shù)據類型時,才應使用這個屬性。

為了解決這一問題,Microsoft 建立了一個外部服務描述文檔的相關性,它描述了數(shù)據類型,且能被服務提供者和請求者訪問。Apache 要求任何時候都要包含 xsi:type 屬性。

這兩種方法都是“合法 SOAP”(盡管 Apache 采取的實現(xiàn)方法被認為更合法和更固定一些),但是它們彼此不兼容。附帶補充一句,Apache SOAP 沒有而且是依然沒有理解 Microsoft 采用的服務描述語言。這種語言已有過三次反復。首先是“服務描述語言”或 SDL,其次是“服務合同語言”或 SCL,再次是現(xiàn)在的 “Web 服務描述語言”或 WSDL。

同時 Microsoft 也沒有包含任何機制能方便地把 xsi:type 屬性添加到工具生成的 SOAP 信封上。不過好在情況已有所改變。Microsoft 現(xiàn)在有一個新的十分靈活的 SOAP 實現(xiàn)方式,它包含對 SOAP 信封更好的支持和更低級別的控制。而 Apache 也已解除需要存在 xsi:type 屬性的限制。這樣,兩個工具間就能互相自由傳遞信息了。

一個擴展的股票行情服務,版本 1

我們這里的示例將為免費的 NASDAQ InfoQuotes 服務創(chuàng)建一個基于 SOAP 的界面,請參閱
http://quotes.nasdaq.com。這個簡單的服務通過 HTTP-GET 請求,以 HTML 或 XML 格式提供擴展的股票行情服務。所有這個項目的 Java 和 XML 源文件在參考資料部分。圖 2 的屏幕截圖顯示行情服務返回的 XML 數(shù)據。

圖 2:Nasdaq 行情的 XML 數(shù)據的屏幕截圖


在 NasdaqQuotes Web 服務的版一上,我們將使用一個簡單的 Java 類,它表達了一個單獨 getQuotes 方法;將 HTTP-GET 請求的 XML 輸出作為一個字符串返回,如清單 1 的代碼片段所示。

配置這個 Web 服務

要將這個 Java 類配置成一個 Web 服務,應該編譯它并確定它在您的 Java Web 服務器的類的路徑上(假設您已安裝和配置了 Apache SOAP 2.1)。以下幾步將告訴您如何從 Microsoft SOAP 上配置和調用服務。

步驟 1. 創(chuàng)建一個 Apache 配置描述符。Apache SOAP Service Manager 利用配置描述符(一個簡單的 XML 文檔)收集有關已配置服務的信息。請參閱清單 2 中的 NasdaqQuotes 服務版本 1.0 的配置描述符。

清單 2: 一個 XML 配置描述符

id="urn:NasdaqQuotes">
scope="Application"
methods="getQuote">

org.apache.soap.server.DOMFaultListener


xmlns:x="" qname="x:symbol"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>

Apache SOAP 文檔中有 XML 配置描述符的詳細結構說明。但是請注意我們例子中的 部分,它從 Apache SOAP 上去掉了 xsi:type 限制。在此,我們已經聲明 XML 元素 symbol 映射到 StringDeserializer 類。這個類把 XML 元素的內容轉換成一個 java.lang.String 的實例。通過使用這種顯式映射,Apache SOAP 無需為了提供映射信息而去尋找 xsi:type。而且,可以假定所有 XML symbol 元素的實例都可看成 String,并進行那樣的串并轉換。

步驟 2. 一旦已創(chuàng)建配置描述符,您得用它將 NasdaqQuotes 服務配置在服務的注冊記錄中。通過執(zhí)行此命令行可以完成配置。

這里 http://acme.com/soap/servlet/rpcrouter 對應您的 SOAP RPC Router Servlet 安裝。NasdaqQuotes 服務完成配置,并可以使用了。您可以通過調用本文附帶的 zip 包中所提供的基于 java 的客戶端來測試此服務。請參閱 readme.txt 的指導。

步驟 3. Microsoft 工具需要使用一個 WSDL 文檔,它描述服務的界面和位置。既然 Apache SOAP 不包含對 WSDL 的任何支持,您就有兩種選擇:用 IBM 的 alphaWorks 的 WSDL 工具包來為指定的 Java 類生成 WSDL,或者自己編寫 WSDL 文件。我建議您手寫 WSDL (請參閱清單 3 ) -- 把東西寫出來會讓您對 WSDL 的結構和功能有更好的感覺。如果您需要出色的 XML 編輯器,我大力推薦商用的 XML-Spy 產品,但是其他編輯器也能用。

在編輯完 NasdaqQuotes.wsdl 文件后,該使用 Microsoft 工具了。在這篇文章所帶的 zip 包中,您會發(fā)現(xiàn) samp1e 目錄里有兩個名為 nq.vbs 和 vq.bat 的文件。 nq.vbs (請參閱清單 4 )文件包含使用 Microsoft SOAP 工具包調用 NasdaqQuotes 服務的代碼,腳本有 43 行代碼,但實際 SOAP 調用的發(fā)生只有前六行(它們中的四行由初始化基本變量的代碼組成)。您看,Microsoft 下了很大功夫使人們方便地使用他們的工具。

清單 4: 針對 Microsoft SOAP 工具包的 nq.vbs

Set SC = CreateObject("MSSOAP.SoapClient")
SC.mssoapinit "D:ServicesNasdaqQuotesClient.wsdl", "", "", ""
Res = SC.getQuote(WScript.Arguments(0))

通過執(zhí)行 nq.bat 文件,您可調用 NasdaqQuotes 服務,把您要查詢的代號作為一個命令行參數(shù)來傳入(請參閱圖 3)。

圖 3: 從命令行運行 NasdaqQuotes


家庭作業(yè): NasdaqQuotes 版本 2

NasdaqQuotes 服務版本 1.0 非常簡潔地顯示了 Microsoft 和 Apache 有能力互相進行便捷的信息傳遞。但是行情服務返回的信息是以字符串的形式返回的,這意味著還需更多努力來改善服務。例如:我們可能要求 SOAP 信封實體以 XML 形式來返回查詢結果,而不是以返回字符串的形式。在 zip 下載包中的 NasdaqQuotes2 Service 示例能讓您采取正確的步驟。您的家庭作業(yè)是仔細研究這個例子里的內容。和平常一樣,如您有任何問題,請告訴我,看看我是否能幫助您。

參考資料

請點擊文章頂部或底部的討論,參與有關這篇文章的討論論壇。

針對本文中的項目的 Java 和 XML 源代碼在這個 zip 文件中。

請下載最新版的 Apache SOAP。

請下載最新版的 Microsoft SOAP 工具包。

請查看 SOAP 參考資料的 cetus-links 索引。

如同 Web 服務資源中心和開發(fā)顧問,Lemur Labs 也有一個附帶參考資料的 SOAP 信息頁面 。

Soaprpc.com專門提供有關 SOAP 信息的參考資料,SoapWare.org 和 SOAPClient.com 同樣如此。

關于作者

James Snell 是一位撰稿人和開發(fā)人員,他也是 IBM Web 服務開發(fā)小組最新成員之一。他在進入 IBM 之前,已經具有關于定制企業(yè)應用開發(fā)和商家對商家這些方面的背景,而且他對 Web 技術前沿方面有極大的熱情。可以通過 jasnell@us.ibm.com 與他聯(lián)系。


瀏覽:Web服務內幕,第1部分

Web服務內幕,第2部分

Web服務內幕,第4部分

Web服務內幕,第5部分

Web服務內幕,第6部分

Web服務內幕,第7部分

Web服務內幕,第8部分

Web服務內幕,第9部分

Web服務內幕,第10部分

發(fā)布:2007-03-25 13:26    編輯:泛普軟件 · xiaona    [打印此頁]    [關閉]
石家莊OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢