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

Web Services Gateway入門

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

Web Services Gateway入門

--Web 服務(wù)的代理

 

Chandra Venkatapathy(chandrav@us.ibm.com),市場(chǎng)經(jīng)理,IBM

Simon Holdsworth(
Simon_Holdsworth@uk.ibm.com),開發(fā)小組領(lǐng)導(dǎo)人,IBM

2002 年 5 月

Web服務(wù)要做到可以被公司防火墻內(nèi)外的應(yīng)用程序和流程訪問,其基礎(chǔ)是如何將您企業(yè)網(wǎng)內(nèi)部的服務(wù)公開給外部用戶。本文著眼于這條途徑所涉及的問題以及 IBM 的 Web Services Gateway 怎樣解決這些問題。

介紹

Web 服務(wù)作為企業(yè)中有效的流程集成的一種機(jī)制在市場(chǎng)中被采用。在為您公司的網(wǎng)絡(luò)創(chuàng)建 Web 服務(wù)的過程中,您可能發(fā)現(xiàn)需要將這些服務(wù)的范圍擴(kuò)大為超出防火墻的限制。您可以將您的服務(wù)提供給業(yè)務(wù)合作伙伴、客戶,甚至是訂戶,并允許他們成為您業(yè)務(wù)流程中不可分割的部分。在您給他人提供對(duì)您的網(wǎng)絡(luò)中的服務(wù)的訪問權(quán)之前,無疑有很多業(yè)務(wù)問題要解決,而我們把重點(diǎn)放在這背后的技術(shù)問題上。

當(dāng)您開始外化超出企業(yè)網(wǎng)范圍的 Web 服務(wù)時(shí),您將面臨很多需要解決的問題。這些問題包括安全、可靠性、服務(wù)質(zhì)量、通信兼容性等等。就通信兼容性問題(這屬于本文的范疇)而言,您可能陷入到大量的技術(shù)問題之中,使用不同協(xié)議、操作系統(tǒng)平臺(tái)、或者甚至用不同編程語言編寫的網(wǎng)絡(luò)軟件需要滿足彼此能夠進(jìn)行平等對(duì)話。

在這些通信兼容性問題之中,您需要考慮下面這些事宜:

將部署和調(diào)用分離:將服務(wù)的實(shí)際實(shí)現(xiàn)與另一個(gè)服務(wù)訪問它的方法分離。這些包括:

入站請(qǐng)求:在防火墻內(nèi)創(chuàng)建并部署 Web 服務(wù)。在不經(jīng)歷一些復(fù)雜的部署和編程問題的情況下,服務(wù)請(qǐng)求者將怎樣從防火墻之外發(fā)出請(qǐng)求?

出站請(qǐng)求:與前一個(gè)條目類似;內(nèi)部用戶怎樣訪問受控環(huán)境中的外部服務(wù)?

流程抽象:怎樣能夠提供更高級(jí)的抽象來識(shí)別并鏈接到調(diào)用的服務(wù)實(shí)現(xiàn)?服務(wù)調(diào)用方法必須足夠靈活以處理一些事件,比如經(jīng)常在類似服務(wù)的外部提供者之間切換,而不需要更改應(yīng)用程序。

靈活性:作為一個(gè)服務(wù)提供者,您需要有更改部署基礎(chǔ)結(jié)構(gòu),而不用通知所有服務(wù)請(qǐng)求者的靈活性。比方說將 Web 服務(wù)部署在后來在操作期間將發(fā)生故障的機(jī)器中。在您的基礎(chǔ)結(jié)構(gòu)中需要一個(gè)流程將調(diào)用路由到另一個(gè)服務(wù)。

協(xié)議轉(zhuǎn)換:為滿足業(yè)務(wù)需求,企業(yè)可能在其網(wǎng)絡(luò)中使用一種特定的消息傳遞基礎(chǔ)結(jié)構(gòu)。但是,您的合作伙伴和客戶可能使用不同的協(xié)議來調(diào)用您的 Web 服務(wù)。您需要一種機(jī)制來協(xié)調(diào)不同的服務(wù)調(diào)用,從而與內(nèi)部基礎(chǔ)結(jié)構(gòu)的需要匹配。

您可能發(fā)現(xiàn),前面的問題涵蓋了部署和操作模型。Web Services Gateway 技術(shù)旨在當(dāng)外化您的 Web 服務(wù)時(shí),解決前面這些問題。從商業(yè)的角度看,它增強(qiáng)了您的資源的重用性,因?yàn)槟暮献骰锇?、客戶和訂戶都可以共享您?nèi)部的 Web 服務(wù)。

介紹 Web Services Gateway

Web Services Gateway 是提供基于 WSDL 文檔的可配置映射的運(yùn)行時(shí)組件。它在任何可用的傳輸通道將任何用 WSDL 定義的服務(wù)映射成另一個(gè)服務(wù)。它通常部署在防火墻處,并能夠訪問內(nèi)部服務(wù)。Web Services Gateway 提供了下面這些功能:

服務(wù)映射:Web Services Gateway 的主要功能是將現(xiàn)有的用 WSDL 定義的 Web 服務(wù)映射成 Gateway 提供給他人的新服務(wù)。這樣 Gateway 擔(dān)當(dāng)代理的角色。外部服務(wù)被導(dǎo)入到 Gateway 中,使其作為代理服務(wù)可供企業(yè)內(nèi)部使用。同樣,內(nèi)部服務(wù)被導(dǎo)入到 Gateway 中,使其作為代理服務(wù)可供外部使用。這些服務(wù)還在必要的地方被發(fā)布到相關(guān)的 UDDI 目錄。

導(dǎo)出映射:內(nèi)部服務(wù)可以被導(dǎo)出供外部調(diào)用。給定 WSDL 文件,Gateway 將生成一個(gè)可以被外部請(qǐng)求者共享的新的 WSDL 文件。請(qǐng)求者將使用 Gateway 作為服務(wù)端點(diǎn)。

導(dǎo)入服務(wù):類似的,外部服務(wù)可以被導(dǎo)入并作為內(nèi)部服務(wù)可用。這將幫助內(nèi)部的服務(wù)請(qǐng)求者調(diào)用服務(wù),服務(wù)好像在 Gateway 上運(yùn)行。

轉(zhuǎn)換:服務(wù)的請(qǐng)求可能源于一個(gè)協(xié)議,而通過使用轉(zhuǎn)換功能可以用一些其它的協(xié)議調(diào)用服務(wù)。一個(gè)通過SOAP over JMS 調(diào)用的內(nèi)部服務(wù)可能使用 SOAP over HTTP 來調(diào)用。

UDDI 發(fā)布和查找:Gateway 使與 UDDI 注冊(cè)中心的操作更容易。當(dāng)您使用 Gateway 映射一個(gè)供外部消費(fèi)的服務(wù)時(shí),您可以在 UDDI 注冊(cè)中心發(fā)布所導(dǎo)出的 WSDL。當(dāng) Gateway 中的服務(wù)被修改過后,UDDI 注冊(cè)中心要隨最近的更新而更新。

安全和管理:提供 Web 服務(wù)請(qǐng)求的單點(diǎn)控制、訪問和驗(yàn)證。

Web Services Gateway 怎樣工作

Web Services Gateway 配有很多傳輸通道。傳輸通道可以定義為 Web 服務(wù)調(diào)用的底層傳輸機(jī)制。這些通道向您提供可以使您的 Web 服務(wù)可用的傳輸選擇。當(dāng)您通過 Gateway 映射服務(wù)時(shí),值得一提的是,您可以指定服務(wù)使用的一組傳輸通道、服務(wù)的 WSDL 位置以及 Gateway 處服務(wù)的名稱。Web Services Gateway 構(gòu)建在 IBM 的 Web 服務(wù)調(diào)用框架(Web Services Invocation Framework(WSIF))基礎(chǔ)上,WSIF 使 Gateway 能夠?qū)?Web 服務(wù)調(diào)用傳遞給任何用 WSDL 定義的 Web 服務(wù),甚至那些用外部協(xié)議(比如 CORBA)的服務(wù)。

情景說明 1. 處理入站請(qǐng)求

我們假設(shè)您提供部署在您企業(yè)的防火墻內(nèi)的 StockQuote 服務(wù),并且您想要和您的合作伙伴和客戶共享這個(gè)服務(wù)。

第 1 步. 創(chuàng)建 WSDL 文檔

創(chuàng)建描述并調(diào)用您的 StockQuote 服務(wù)的 WSDL 文檔。清單 1 展示了描述 StockQuote 服務(wù)的 WSDL 的樣本。正如您看到的,soap address location 指向防火墻內(nèi)的 myhost。

清單 1. StockQuote SOAP 服務(wù) WSDL

<definitions targetNamespace=...>

  <message name="GetQuoteInput">
    <part name="symbol" type="xsd:string"/>
  </message>

  <message name="GetQuoteOutput">
    <part name="quote" type="xsd:float"/>
  </message>

  <portType name="StockquotePT">
    <operation name="getQuote">
      <input message="tns:GetQuoteInput"/>
      <output message="tns:GetQuoteOutput"/>
    </operation>
  </portType>

  <binding name="SOAPBinding" type="tns:StockquotePT">
    <soap:binding style="rpc" transport="
http://schemas.xmlsoap.org/soap/http"/>
    <operation name="getQuote">
      <soap:operation soapAction="
http://example.com/GetTradePrice"/>
      <input>
        <soap:body use="encoded" namespace="urn:xmltoday-delayed-quotes"
              encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded" namespace="urn:xmltoday-delayed-quotes"
                encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>
  </binding> 
 
  <service name="StockquoteService">
     <documentation>Stock quote service</documentation>
     <port name="SOAPPort" binding="tns:SOAPBinding">
       <soap:address location="
http://myhost:8080/soap/servlet/rpcrouter"/>
     </port>
   </service>
</definitions>

第 2 步. 將 WSDL 文檔導(dǎo)入到 Gateway

這只要求提供托管在 Gateway 的服務(wù)的名稱,選擇 SOAP/HTTP 傳輸通道,并指定 StockQuote WSDL 文件的位置。Gateway 將生成一個(gè)可以與您的合作伙伴共享的新的 WSDL 文件。這兩個(gè)文件之間的主要區(qū)別是 Gateway 所生成的文件將把 Gateway 作為服務(wù)端點(diǎn),并且將 binding 和 portType 分離成一個(gè)接口 WSDL 文件。清單 2 展示了恰當(dāng)修改過的 Gateway 所生成的文件。

清單 2. Gateway StockQuote 服務(wù)實(shí)現(xiàn) WSDL

<definitions targetNamespace=...>
<import namespace="
http://www.ibm.com/namespace/wsif/samples/stockquote"
location="
http://gatewayhost:80/wsgw/ServiceInterface?name=StockQuote"/>
  <service name="StockQuote">
    <port name="StockquotePTApacheSOAPBindingPort"
          binding="interface:StockquotePTApacheSOAPBinding">
      <soap:address location="
http://gatewayhost:80/wsgwsoap1/soaprpcrouter"/>
    </port>
  </service>
</definitions>

 第 3 步. 讓防火墻外的請(qǐng)求者共享 WSDL 文檔

這可以以下面三種方式中的一種完成:

請(qǐng)求 Gateway 將服務(wù)發(fā)布到 UDDI,在這種情況下,服務(wù)請(qǐng)求者可以通過使用 UDDI 查找獲得服務(wù)。

使用從 Gateway 獲得的 WSDL 副本。

訪問所提供的從 Gateway 動(dòng)態(tài)獲得 WSDL 的 URL(請(qǐng)參閱清單 3)。

清單 3. Gateway Web 服務(wù) URL

http://gatewayhost:gatewayport/wsgw/ServiceDefinition?name=gatewayservicename

第 4 步. 服務(wù)請(qǐng)求者向 Gateway 發(fā)送 SOAP 請(qǐng)求

服務(wù)請(qǐng)求者將向 Gateway 發(fā)送 SOAP 請(qǐng)求,Gateway 將調(diào)用防火墻內(nèi)部的服務(wù),如圖 1 所示。

圖 1. 經(jīng)過 Gateway 的入站請(qǐng)求


 情景說明 2. 處理出站請(qǐng)求:

除了您將 WSDL 文檔從防火墻外的提供者導(dǎo)入到 Gateway(Gateway 生成將被內(nèi)部服務(wù)請(qǐng)求者使用的新的 WSDL 文檔)之外,它與前一個(gè)案例相同。圖 2 展示了出站請(qǐng)求的流程。

圖 2. 經(jīng)過 Gateway 的出站請(qǐng)求


 情景說明 3. 協(xié)議轉(zhuǎn)換

我們來擴(kuò)展情景說明 1。您內(nèi)部的 StockQuote 服務(wù)對(duì)于 SOAP/JMS 是可用的,而您的客戶和合作伙伴將通過 SOAP over HTTP 調(diào)用它。在這個(gè)案例中,您大體上按照和情景說明 1 相同的步驟執(zhí)行。但是,在第 2 步中,您在 Gateway 中指定服務(wù)將通過 SOAP over HTTP 來訪問。Gateway 將生成與您的合作伙伴共享的新的 WSDL。特別是,接口 WSDL 文件將包含 SOAP/HTTP 綁定,而不是原始的 SOAP/JMS 綁定。圖 3 展示了被轉(zhuǎn)換成 SOAP/JMS 調(diào)用的入站請(qǐng)求的流程。

圖 3. 協(xié)議轉(zhuǎn)換


 情景說明 4. 對(duì)非 SOAP 服務(wù)的訪問

這一次 StockQuote 服務(wù)作為 Java 對(duì)象實(shí)現(xiàn),但是您希望使它對(duì)于使用 SOAP/HTTP 的客戶機(jī)可用。在這個(gè)案例中,服務(wù)的 WSDL 與情景說明 1 中的 WSDL 相同,除了 WSDL 包含 Java 綁定之外,如清單 4 所示。

清單 4:StockQuote 服務(wù)的 Java 綁定

<definitions ...>

  <binding name="JavaBinding" type="tns:StockquotePT">
    <java:binding/>
    <format:typeMapping encoding="Java" style="Java">
      <format:typeMap typeName="xsd:string" formatType="java.lang.String" />
      <format:typeMap typeName="xsd:float" formatType="java.lang.Float" />
    </format:typeMapping>
    <operation name="getQuote">
      <java:operation methodName="getQuote"/><input/><output/>
    </operation>      
  </binding>

  <service name="StockquoteService">
    <documentation>Stock quote service</documentation>
    <port name="JavaPort" binding="tns:JavaBinding">
      <java:address className="services.stockquote.Stockquote"/>
    </port>
  </service>
</definitions>

當(dāng)這個(gè)服務(wù)被部署到 Gateway,并且 SOAP/HTTP 傳輸通道被選中時(shí),來自 Gateway 的 WSDL 包含 SOAP 綁定和當(dāng)前服務(wù)可用的 SOAP/HTTP 端口。

最后,您可以在 http://www7b.boulder.ibm.com/wsdd/downloads/wsgw/wsgw.html 上得到 Web Services Gateway 預(yù)覽技術(shù),作為一種預(yù)覽技術(shù)。

總結(jié)

隨著 Web 服務(wù)部署的增加以及更頻繁地在防火墻內(nèi)部和外部被使用,公開這些應(yīng)用程序以及流程的傳統(tǒng)的非 Web 服務(wù)方法可能會(huì)導(dǎo)致維護(hù)和可靠性問題。Web Services Gateway 靈活的抽象方法旨在為這些問題提供解決方案,并且鼓勵(lì)更好地使用像應(yīng)用程序和流程這樣的資產(chǎn)。

 參考資料

  • 請(qǐng)通過單擊文章頂部或底部的討論參加關(guān)于本文的討論論壇。
  • 請(qǐng)下載 Web Services Gateway,然后試驗(yàn) StockQuote 樣本。
  • 請(qǐng)下載 IBM UDDI WebSphere Registry,從而在專有設(shè)置中發(fā)布和共享您的服務(wù)。
  • 請(qǐng)下載 alphaWorks 上的 WSIF 分發(fā)包,然后試驗(yàn)更容易的樣本。這給您 WSIF 支持的不同調(diào)用風(fēng)格的第一手示例及其超出特定于協(xié)議的客戶機(jī) API 的優(yōu)點(diǎn)。
  • 請(qǐng)學(xué)習(xí) SOAP、WSDLUDDI
  • 如果您以前沒對(duì) Web 服務(wù)編過程,Web Services ToolKit 是良好的起點(diǎn)。
  • 請(qǐng)看一看 WSDL4J,一個(gè)可擴(kuò)展的 WSDL 解析框架,WSIF 在此之上構(gòu)建。

關(guān)于作者

Chandra Venkatapathy 是 IBM Software Group 的 WebSphere Web 服務(wù)市場(chǎng)推廣部門的市場(chǎng)經(jīng)理。整個(gè)去年,他都在管理和推廣 Web 服務(wù)技術(shù)和產(chǎn)品。當(dāng)前,Chandra 正忙于用 Web 服務(wù)改進(jìn)中間件和集成的業(yè)務(wù)。Chandra 持有 University of North Carolina 的 Kenan-Flagler Business School 頒發(fā)的 MBA 學(xué)位以及電子工程和計(jì)算機(jī)科學(xué)方面的碩士學(xué)位。您可以通過
chandrav@us.ibm.com 與 Chandra 聯(lián)系。


Simon Holdsworth 是 IBMs Hursley, UK Labs 的 WebSrvices Gateway 的開發(fā)小組領(lǐng)導(dǎo)人以及系統(tǒng)設(shè)計(jì)師。他以前在 IBM 的經(jīng)驗(yàn)包括 MQSeries Integrator、Component Broker、DSOM(在此期間他參與開發(fā) OMG OTS 規(guī)范和 IBM 參考實(shí)現(xiàn))和 CICS/ESA。他具有英國(guó) Bristol University 頒發(fā)的數(shù)理邏輯和計(jì)算理論的理學(xué)碩士學(xué)位。您可以通過 Simon_Holdsworth@uk.ibm.com 與 Simon 聯(lián)系。

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

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

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

咨詢:400-8352-114

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

QQ在線咨詢