專利名稱:動(dòng)態(tài)服務(wù)代理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及web服務(wù)。更具體地,本發(fā)明能夠?yàn)闆]有被開發(fā)成在web服務(wù)環(huán)境內(nèi)通信的傳統(tǒng)應(yīng)用程序組件生成動(dòng)態(tài)web服務(wù)和動(dòng)態(tài)服務(wù)代理。該服務(wù)代理也有利地通過提供web服務(wù)客戶機(jī)和傳統(tǒng)接口之間的抽象層來允許開發(fā)員對(duì)展示給web服務(wù)客戶機(jī)的接口進(jìn)行更緊密的控制。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)和相關(guān)技術(shù)影響了社會(huì)的方方面面。實(shí)際上,計(jì)算機(jī)系統(tǒng)處理信息的能力改變了人們生活和工作的方式。計(jì)算機(jī)系統(tǒng)現(xiàn)在通常執(zhí)行大量任務(wù)(例如,文字處理、調(diào)度、數(shù)據(jù)庫管理等),這些任務(wù)在計(jì)算機(jī)系統(tǒng)出現(xiàn)之前都是手動(dòng)操作的。最近,計(jì)算機(jī)系統(tǒng)被彼此耦合來形成計(jì)算機(jī)網(wǎng)絡(luò),在計(jì)算機(jī)網(wǎng)絡(luò)上,計(jì)算機(jī)系統(tǒng)可電子地通信以共享數(shù)據(jù)。Web服務(wù)是推動(dòng)此類計(jì)算機(jī)系統(tǒng)之間的通信的驅(qū)動(dòng)力,并徹底改變了人們構(gòu)建和使用軟件的方式。
Web服務(wù)使得應(yīng)用程序能共享數(shù)據(jù),并更強(qiáng)有力地能夠調(diào)動(dòng)來自其它應(yīng)用程序的能力,而不必關(guān)心這些應(yīng)用程序是如何被構(gòu)建的、它們運(yùn)行在什么操作系統(tǒng)或平臺(tái)上、以及使用什么設(shè)備來訪問它們。通過包括SOAP(簡(jiǎn)單開放訪問協(xié)議)、XML(可擴(kuò)展標(biāo)記語言)、UDDI(通用描述發(fā)現(xiàn)集成)、WSDL(Web服務(wù)描述語言)等行業(yè)標(biāo)準(zhǔn)協(xié)議經(jīng)由因特網(wǎng)來調(diào)用Web服務(wù)。盡管web服務(wù)仍舊彼此獨(dú)立,但它們可以松散地鏈接成執(zhí)行特定任務(wù)的協(xié)作組。
通常,web服務(wù)網(wǎng)絡(luò)上的電子通信包括請(qǐng)求對(duì)服務(wù)器計(jì)算機(jī)系統(tǒng)(下文中被稱為“服務(wù)器”、“服務(wù)”或“web服務(wù)”)處的網(wǎng)絡(luò)服務(wù)(例如,web服務(wù))的訪問的客戶計(jì)算機(jī)系統(tǒng)(下文中被稱為“客戶機(jī)”)。從而,客戶機(jī)向服務(wù)發(fā)送對(duì)其系統(tǒng)資源的特定訪問的請(qǐng)求,其中如果該客戶機(jī)被授權(quán)和確認(rèn),那么服務(wù)使用提供所需信息的響應(yīng)消息來響應(yīng)。當(dāng)然,客戶機(jī)和服務(wù)之間有其它消息通信模式可用,包括簡(jiǎn)單的單消息以及更復(fù)雜的多消息交換,例如通知、請(qǐng)求-響應(yīng)、發(fā)布-訂閱模式、輪詢、踢-推(kick-push)、排隊(duì)等。而且,這些類型的通信由客戶機(jī)和服務(wù)雙方在分布式系統(tǒng)(例如,web服務(wù))的契約中定義的各種要求和能力來管理。
契約是服務(wù)(或客戶機(jī))行為的可見方面的表達(dá)。契約由機(jī)器可讀語言和人類語言的混合來表示。除了顯然可能提供額外精確性之外,機(jī)器可讀語言使得能夠使用工具來構(gòu)造部分服務(wù)實(shí)現(xiàn)、自動(dòng)化服務(wù)部署、交換監(jiān)察/確認(rèn)消息、管理服務(wù)以及允許大量其它網(wǎng)絡(luò)相關(guān)的功能。然而,由于機(jī)器可讀語言在表達(dá)力方面的限制,人類語言仍舊是契約的重要組成部分,主要用于描述消息和消息交換模式語義。
網(wǎng)絡(luò)協(xié)議描述語言(例如,WSDL)提供用于以公共或標(biāo)準(zhǔn)語言描述契約(例如,web服務(wù)契約)的總包裝或規(guī)范。這樣的規(guī)范使得開發(fā)員和開發(fā)員工具易于創(chuàng)建和解釋契約。這些網(wǎng)絡(luò)協(xié)議描述語言(下文中被稱為“NPDL”)具有廣泛的工具套件,這很大程度地說明了其流行度。
在web服務(wù)出現(xiàn)之前,多年來,大量分布式應(yīng)用程序是使用來自各個(gè)廠商的基于傳統(tǒng)組件的體系結(jié)構(gòu)(例如,COM(組件對(duì)象模型)、DCOM(分布式組件對(duì)象模型)、CORBA(公用對(duì)象請(qǐng)求代理程序體系結(jié)構(gòu)))來編寫的。然而,隨著基于標(biāo)準(zhǔn)的web服務(wù)的到來和出現(xiàn),存在對(duì)將來自這些傳統(tǒng)組件的商業(yè)邏輯展示為web服務(wù)的興趣。作為示例,且不考慮以后的方法,本發(fā)明一般采用諸如支持以下接口的應(yīng)用程序組件interface IStockSystem:IDispatch{HRESULT GetProductDescription([in]BSTR ProductID,[out,retval]BSTR*ProdDesc);HRESULT GetProductInventory([in]BSTR ProductID,[out,retval]short*ProdCount);};且從該組件定義中產(chǎn)生具有以下WSDL片段中示出的若干操作的相應(yīng)web服務(wù)層<wsdl:portType name="StockSystem">
<wsdl:operation name="GetProductDescription">
<wsdl:input message="tns:GetProductDescriptionIn"/>
<wsdl:output message="tns:GetProductDescriptionOut"/>
</wsdl:operation>
<wsdl:operation name="GetProductInventory">
<wsdl:input message="tns:GetProductInventoryIn"/>
<wsdl:output message="tns:GetProductInventoryOut"/>
</wsdl:operation>
</wsdl:portType>
迄今,僅遵循了若干主要模式或方法用于在web服務(wù)環(huán)境內(nèi)轉(zhuǎn)換或使用傳統(tǒng)組件。一種方法是遷移或修改,這需要開發(fā)員修改該組件的源代碼以添加web服務(wù)支持。當(dāng)該應(yīng)用程序被編譯和執(zhí)行時(shí),該應(yīng)用程序?qū)⒁赃m當(dāng)?shù)膚eb服務(wù)支持啟動(dòng),同時(shí)仍允許傳統(tǒng)客戶機(jī)連接至該底層應(yīng)用程序。
另一種方法是使用工具和元數(shù)據(jù)驅(qū)動(dòng)方法,這產(chǎn)生靜態(tài)包裝服務(wù)。并非要求修改組件源代碼,而是該方法使用更外部的方法來為組件檢查現(xiàn)有的已注冊(cè)源代碼,以確定該組件應(yīng)提供的服務(wù)。這產(chǎn)生了外部但至少一開始與底層的未經(jīng)修改的組件一致的靜態(tài)web服務(wù)包裝。
盡管上述修改和靜態(tài)的方法允許在web服務(wù)環(huán)境中訪問傳統(tǒng)組件的業(yè)務(wù)邏輯,但仍舊存在與這兩個(gè)方法均相關(guān)聯(lián)的缺陷和問題。例如,因?yàn)樾薷姆椒词巩?dāng)不期望改變業(yè)務(wù)邏輯時(shí)也需要修改源代碼,與其說是簡(jiǎn)單的管理過程,倒不如說這是一個(gè)開發(fā)任務(wù)。從而,這樣的任務(wù)是超出典型管理員角色的范圍的,且要求額外的技能。另外,開發(fā)修改以啟用web服務(wù)在使用原始代碼環(huán)境的情況下可能不可用。例如,在修改使用不再支持的傳統(tǒng)語言編寫的組件的情況中,該組件首先必須被移植到當(dāng)前的語言。從而,最初看上去如向方法添加屬性的修改實(shí)際上是對(duì)不同語言、運(yùn)行環(huán)境和開發(fā)環(huán)境的遷移。
在靜態(tài)使用工具方法中,當(dāng)修改底層組件或部署新版本時(shí)存在問題。在這樣的情況中,這些改變?cè)谥匦律砂b服務(wù)之前不會(huì)自動(dòng)反映在該服務(wù)中。另外,對(duì)web服務(wù)操作,存在服務(wù)和底層組件之間的顯式依賴性。從而,必須注意確保該組件和web服務(wù)的生存周期是同步的(即,包裝服務(wù)要求該組件為活動(dòng)的,而該組件要求包裝為活動(dòng)的)。而且,取決于環(huán)境和包裝的外部性質(zhì),一般存在要被部署和管理的其它組件。換言之,如果該組件被移至另一臺(tái)機(jī)器,那么該包裝組件必須也相應(yīng)被標(biāo)識(shí)和移動(dòng)。
解決上述修改和靜態(tài)方法的缺陷和缺點(diǎn)的一種方法是,如此處所述和在2005年3月8日提交的名為“DYNAMIC SERVICE GENERATION FOR LEGACYCOMPONENTS(對(duì)傳統(tǒng)組件的動(dòng)態(tài)服務(wù)生成)”的美國(guó)專利申請(qǐng)中更詳細(xì)描述的動(dòng)態(tài)生成web服務(wù),該專利申請(qǐng)通過引用包含在此。然而,該方法(以及上述系統(tǒng))仍舊具有各種缺點(diǎn)。例如,這些系統(tǒng)的一個(gè)問題是,存在帶有由于多種原因而不能被修改或不適于作為web服務(wù)展示的接口的現(xiàn)有分布式應(yīng)用程序。例如,它們可能含有需要例如SOAP消息等不能被轉(zhuǎn)換成web服務(wù)消息的參數(shù)的調(diào)用。作為其替代,或與其相結(jié)合,它們可能是以需要對(duì)單步操作進(jìn)行來回方法調(diào)用的方式來編寫的,而典型的web服務(wù)對(duì)此不支持。
作為不適于展示為web服務(wù)的接口的示例,考慮以下接口[object,uuid(a0753298-46bc-444e-a89b-b66d8a0cec57)]interface IOrderDescription:IUnknown{HRESULT GetProductName([out]BSTR*ppszName);
HRESULT GetQuantity([out]DWORD*pdwQuantity);
HRESULT GetNegotiatedPrice([out]DWORD*pdwPrice);
}[object,uuid(5605102f-d914-4633-a974-4369a1af8db9)]interface IComPlusObject:IUnknown{HRESULT PlaceOrder([in]IOrderDescription*pOrderDescription);
}如所示的,通過現(xiàn)有的COM對(duì)象展示IComPlusObject,并采用實(shí)現(xiàn)該IComPlusObject的對(duì)象(即,IOrderDescription)作為其單個(gè)參數(shù)。然而,注意,該IComPlusObject不能按原樣被展示為web服務(wù),因?yàn)榈湫偷膚eb服務(wù)基礎(chǔ)架構(gòu)不支持采用對(duì)象作為參數(shù)的方法調(diào)用。
為了彌補(bǔ)這些缺陷,目前的實(shí)踐允許如上在修改方法中所述的對(duì)至少組件和組件接口(有可能是整個(gè)應(yīng)用程序)的重寫。如上所述,盡管如此,用于通過重寫創(chuàng)建新服務(wù)的該初步方法是一個(gè)重要的任務(wù)。因?yàn)榭蛻魴C(jī)和服務(wù)通過使用相同接口的相同實(shí)例而被緊密耦合,因此客戶機(jī)和服務(wù)器雙方均必須在對(duì)該服務(wù)的改變之后被更新。另外,該改進(jìn)的重寫一般不在大多數(shù)用戶的技能之內(nèi)。
至少對(duì)前述原因,需要為傳統(tǒng)組件提供web服務(wù)和業(yè)務(wù)邏輯,而無需開發(fā)員修改底層組件源代碼,從而允許組件修改或版本更新,以及支持服務(wù)與底層組件之間的顯式依賴性。另外,需要提供允許開發(fā)員為不能工作或低效的組件接口創(chuàng)建接口,而無需重寫該應(yīng)用程序組件或組件接口的機(jī)制。
發(fā)明內(nèi)容
在Web服務(wù)環(huán)境中為傳統(tǒng)組件提供服務(wù)和業(yè)務(wù)邏輯的典型系統(tǒng)的上述缺陷和缺點(diǎn)通過本發(fā)明的示例性實(shí)施例得以克服。例如,本發(fā)明提供用于通過由開發(fā)員為經(jīng)由未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信的傳統(tǒng)組件創(chuàng)建的自定義對(duì)象來支持web服務(wù)的機(jī)制。該自定義對(duì)象允許開發(fā)員緊密控制web服務(wù)的互操作性、健壯性和效率,而無需重寫該傳統(tǒng)組件或組件接口。
例如,本發(fā)明的實(shí)施例允許從web服務(wù)客戶機(jī)接收對(duì)訪問由具有傳統(tǒng)組件的應(yīng)用程序提供的服務(wù)的請(qǐng)求。該傳統(tǒng)組件使用未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信。之后,該請(qǐng)求被標(biāo)識(shí)為對(duì)應(yīng)于由服務(wù)代理控制的服務(wù),服務(wù)代理是由開發(fā)員創(chuàng)建的將代理接口展示為該web服務(wù)客戶機(jī)和該傳統(tǒng)接口之間的抽象的自定義對(duì)象。至少一部分請(qǐng)求通過該代理接口傳遞給該服務(wù)代理的實(shí)例以供進(jìn)一步處理。服務(wù)代理被配置成通過對(duì)一個(gè)或多個(gè)傳統(tǒng)組件的調(diào)用、對(duì)該服務(wù)代理實(shí)例的調(diào)用或?qū)υ搼?yīng)用程序或該服務(wù)代理實(shí)例外部的其它系統(tǒng)的調(diào)用中的一個(gè)或多個(gè)來處理該請(qǐng)求的至少一部分。
其它示例性實(shí)施例允許初始化由開發(fā)員創(chuàng)建的自定義對(duì)象。在該實(shí)施例中,接收初始化應(yīng)用程序的請(qǐng)求,其中該應(yīng)用程序包含用于提供服務(wù)的一個(gè)或多個(gè)傳統(tǒng)組件。而且,該傳統(tǒng)組件使用未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信?;谠摮跏蓟瘧?yīng)用程序的請(qǐng)求,將服務(wù)代理實(shí)例標(biāo)識(shí)為需要被生成,其中該服務(wù)代理是由開發(fā)員創(chuàng)建的將代理接口展示為web服務(wù)客戶機(jī)和該傳統(tǒng)接口之間的抽象的自定義對(duì)象。之后,訪問描述將被展示給該web服務(wù)客戶機(jī)的代理接口的元數(shù)據(jù)。該元數(shù)據(jù)然后用于生成包含該代理接口的服務(wù)代理的實(shí)例。該服務(wù)代理的實(shí)例還被配置成通過對(duì)該一個(gè)或多個(gè)傳統(tǒng)組件的調(diào)用、對(duì)該服務(wù)代理實(shí)例的調(diào)用或?qū)υ搼?yīng)用程序或服務(wù)代理實(shí)例外部的其它系統(tǒng)的調(diào)用中的一個(gè)或多個(gè)來處理來自該web服務(wù)客戶機(jī)的請(qǐng)求的至少一部分。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的描述中描繪,且其中部分可通過閱讀該描述而變得明顯,或者可以通過實(shí)現(xiàn)本發(fā)明來領(lǐng)會(huì)。本發(fā)明的特征和優(yōu)點(diǎn)可以通過所附權(quán)利要求書中特別指出的裝置及其組合來實(shí)現(xiàn)和獲取。通過閱讀以下描述和所附權(quán)利要求書,本發(fā)明的這些和其它特征將是顯而易見的,或者也可以通過如之后所述對(duì)本發(fā)明的實(shí)現(xiàn)來領(lǐng)會(huì)。
為了描述可獲取本發(fā)明上述及其它優(yōu)點(diǎn)和特征的方式,將參考在附圖中示出的本發(fā)明的特定實(shí)施例呈現(xiàn)以上簡(jiǎn)要描述的本發(fā)明的更具體描述。要理解,這些附圖僅描述本發(fā)明的典型實(shí)施例,從而不被認(rèn)為是對(duì)其范圍的限制,本發(fā)明將通過使用附圖以額外的特性和細(xì)節(jié)來描述和解釋,附圖中圖1A示出了根據(jù)本發(fā)明的示例實(shí)施例,被配置成創(chuàng)建動(dòng)態(tài)web服務(wù)的分布式系統(tǒng);圖1B示出了根據(jù)本發(fā)明的示例實(shí)施例,被配置成通過服務(wù)代理和動(dòng)態(tài)web服務(wù)來提供web服務(wù)的分布式系統(tǒng);圖2示出了根據(jù)示例實(shí)施例,通過由開發(fā)員創(chuàng)建的自定義對(duì)象來提供web服務(wù)的方法的流程圖;圖3示出了根據(jù)示例實(shí)施例,啟動(dòng)服務(wù)代理的實(shí)例的方法的流程圖;以及圖4示出了為本發(fā)明提供合適的操作環(huán)境的示例系統(tǒng)。
具體實(shí)施例方式
本發(fā)明提供用于為沒有被開發(fā)、設(shè)計(jì)或編碼成在web服務(wù)環(huán)境內(nèi)通信的傳統(tǒng)應(yīng)用程序組件生成動(dòng)態(tài)web服務(wù)和代理服務(wù)的實(shí)例的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。該代理服務(wù)是允許開發(fā)員更緊密控制web服務(wù)的互操作性、健壯性和效率,而無需重寫該傳統(tǒng)組件或接口的自定義對(duì)象或代碼。本發(fā)明的實(shí)施例可包括含有將在以下更詳細(xì)討論的各種計(jì)算機(jī)硬件組件或模塊的專用或通用計(jì)算機(jī)。
在第一個(gè)示例實(shí)施例中,本發(fā)明提供允許管理事件在初始化傳統(tǒng)應(yīng)用程序組件的過程中觸發(fā)或引起生成動(dòng)態(tài)web服務(wù)的機(jī)制。類似于其它類型的靜態(tài)使用工具的方法,如此處所支持的動(dòng)態(tài)方法使用描述用于與傳統(tǒng)組件通信的接口的可用元數(shù)據(jù)。并非通過一次性或偶然使用工具來生成和展現(xiàn)web服務(wù),而是示例實(shí)施例允許通過支持基礎(chǔ)架構(gòu)來生成web服務(wù),作為應(yīng)用程序初始化的一個(gè)標(biāo)準(zhǔn)部分。當(dāng)停止應(yīng)用程序之后,提供停止相應(yīng)的動(dòng)態(tài)web服務(wù)并刪除用于生成該動(dòng)態(tài)web服務(wù)的web服務(wù)描述的終止序列。從而,每次啟動(dòng)應(yīng)用程序時(shí),就將需要咨詢可用的元數(shù)據(jù),并在進(jìn)行中構(gòu)建一致的服務(wù)。
圖1A示出了如上所述的各種示例實(shí)施例。如圖所示,提供支持web服務(wù)客戶機(jī)145和傳統(tǒng)客戶機(jī)105兩者的分布式系統(tǒng)100,從而允許訪問面向服務(wù)110的應(yīng)用程序125。更具體地,提供具有包含傳統(tǒng)組件135的應(yīng)用程序125的服務(wù)110。示例實(shí)施例允許管理員(未示出)設(shè)置管理配置設(shè)置155,它指示動(dòng)態(tài)web服務(wù)175應(yīng)在應(yīng)用程序125啟動(dòng)之后生成。從而,基于管理配置設(shè)置155,在應(yīng)用程序125啟動(dòng)之后(且可能依據(jù)從應(yīng)用程序?qū)S玫呐渲梦募幸龅钠渌渲?,web服務(wù)初始化器180將從目錄數(shù)據(jù)庫165中訪問元數(shù)據(jù)160。
注意,示例實(shí)施例允許初始化應(yīng)用程序125(以及相應(yīng)的動(dòng)態(tài)web服務(wù)175)的若干方式。例如,對(duì)初始化應(yīng)用程序125的請(qǐng)求可以通過來自管理員用戶界面的輸入接收。其它示例實(shí)施例允許在接收對(duì)訪問由應(yīng)用程序125提供的服務(wù)的請(qǐng)求140(或其它類似類型的請(qǐng)求)之后自動(dòng)初始化應(yīng)用程序125。當(dāng)然,初始化應(yīng)用程序125的其它公知的方式也可用于本發(fā)明。從而,除非明確地要求保護(hù),否則用于初始化應(yīng)用程序124的任何特定的方式或進(jìn)程僅用于說明性的目的,而不意味著限制或縮小本發(fā)明的范圍。
如上所述,無論應(yīng)用程序125是如何被初始化的,在初始化后訪問描述組件接口的元數(shù)據(jù)160。該元數(shù)據(jù)160是關(guān)于動(dòng)態(tài)web服務(wù)175如何與傳統(tǒng)組件135通信的信息。換言之,元數(shù)據(jù)160特別地指示以下的一個(gè)或多個(gè)傳統(tǒng)組件135需要何種調(diào)用115;將何種參數(shù)115傳遞給傳統(tǒng)組件135;應(yīng)以什么順序傳遞參數(shù)115;以及指示例如是否從傳統(tǒng)組件135接收返回值120的消息交換模式等。注意,不是所有的調(diào)用115都包含參數(shù)115。例如,F(xiàn)ormatAllAvailableDisks()(格式化所有可用磁盤)和其它調(diào)用的操作不需要任何參數(shù)。從而,元數(shù)據(jù)160可具有或沒有關(guān)于要傳遞給傳統(tǒng)組件135的參數(shù)115的細(xì)節(jié),這當(dāng)然取決于要作出的調(diào)用115的類型。
在任何情況中,訪問元數(shù)據(jù)160之后,web服務(wù)初始化器180可生成web服務(wù)描述150或契約(例如,WSDL文檔)。另外,web服務(wù)初始化器180可在運(yùn)行時(shí)使用web服務(wù)描述150來啟動(dòng)動(dòng)態(tài)web服務(wù)175。另外,可能必須使用web服務(wù)描述150來創(chuàng)建與其相一致的web服務(wù)客戶機(jī)145。注意,盡管生成的web服務(wù)描述150用于創(chuàng)建動(dòng)態(tài)web服務(wù)175,但是這樣的事件對(duì)本發(fā)明不是關(guān)鍵的。換言之,web服務(wù)初始化器180在訪問元數(shù)據(jù)160之后可自動(dòng)生成動(dòng)態(tài)web服務(wù)175,而無需使用web服務(wù)描述150。從而,除非明確地要求保護(hù),否則使用web服務(wù)描述150用于生成動(dòng)態(tài)web服務(wù)175僅是為說明性的目的,而不意味著限制或縮小本發(fā)明的范圍。
一旦動(dòng)態(tài)web服務(wù)175被創(chuàng)建且傳統(tǒng)組件135為活動(dòng),web服務(wù)客戶機(jī)145作出對(duì)訪問由傳統(tǒng)組件135提供的服務(wù)的請(qǐng)求140。請(qǐng)求140可包括諸如請(qǐng)求由傳統(tǒng)組件135提供的服務(wù)的操作和/或傳統(tǒng)組件135需要的參數(shù)115(如果存在)等內(nèi)容。在接收請(qǐng)求140之后,并基于該請(qǐng)求內(nèi)的操作,動(dòng)態(tài)web服務(wù)175檢查請(qǐng)求140的內(nèi)容,并用適當(dāng)?shù)膮?shù)(如果有)對(duì)對(duì)傳統(tǒng)組件135作出適當(dāng)?shù)恼{(diào)用115。換言之,動(dòng)態(tài)web服務(wù)175作為公用web服務(wù)請(qǐng)求140(例如,XML文檔)與適當(dāng)?shù)恼{(diào)用及所需參數(shù)115(如果有)之間的轉(zhuǎn)換器,用于與傳統(tǒng)組件135通信。
如前所述,除了適當(dāng)?shù)恼{(diào)用115和所需參數(shù)175(如果有)以外,動(dòng)態(tài)web服務(wù)175應(yīng)被配置成了解用于傳統(tǒng)組件135的適當(dāng)消息交換模式。從而,如果需要返回值120,那么動(dòng)態(tài)web服務(wù)175可期望這樣的返回。該返回值120然后可在由動(dòng)態(tài)web服務(wù)175生成的適當(dāng)?shù)膚eb服務(wù)響應(yīng)130內(nèi)格式化。注意,盡管該示例的消息交換模式是請(qǐng)求-響應(yīng),但其它消息交換模式也可用于本發(fā)明。從而,除非明確地要求保護(hù),否則使用如此處所述的任何特定類型的消息交換模式僅用于說明性的目的,而不意味著限制或縮小本發(fā)明的范圍。
其它示例實(shí)施例提供應(yīng)用程序125的終止序列。當(dāng)關(guān)閉或停止傳統(tǒng)應(yīng)用程序125時(shí),示例性實(shí)施例允許終止動(dòng)態(tài)web服務(wù)175,并例如通過將web服務(wù)描述150發(fā)送給回收站170以將其刪除。從而,因?yàn)閣eb服務(wù)描述150不被保存和/或重用,所以如果修改傳統(tǒng)組件175或提供更新的版本,也不會(huì)存在不一致性。
注意,本發(fā)明也支持傳統(tǒng)客戶機(jī)105。從而,傳統(tǒng)客戶機(jī)105可使用適當(dāng)?shù)膮?shù)115(如果有)對(duì)傳統(tǒng)應(yīng)用程序125直接作出調(diào)用。返回值120(如果有)也可直接從傳統(tǒng)應(yīng)用程序125遞送給傳統(tǒng)客戶機(jī)105。
如前所述,盡管上述動(dòng)態(tài)web服務(wù)克服了與對(duì)傳統(tǒng)組件的web服務(wù)的修改和靜態(tài)方法相關(guān)聯(lián)的現(xiàn)有問題,但是仍舊存在對(duì)該動(dòng)態(tài)系統(tǒng)的增強(qiáng)或改進(jìn)的需求。如上所述,例如,由于多種原因,可能無法改變接口或接口不適于被展示為web服務(wù)。從而,本發(fā)明的示例性實(shí)施例提供允許開發(fā)員定義新接口并插入實(shí)現(xiàn)這些新接口的自定義轉(zhuǎn)換代碼的機(jī)制。這些新接口然后可以按照從傳統(tǒng)組件接口中抽象出web服務(wù)客戶機(jī)的方式被展示給web服務(wù)客戶機(jī)。實(shí)現(xiàn)該新接口的對(duì)象在此處被稱為“服務(wù)代理”,且該新接口將通常被稱為“代理接口”。
作為關(guān)于如何能夠?qū)崿F(xiàn)服務(wù)代理的示例,回想背景技術(shù)一節(jié)中的示例,其中IComPlusObject采用對(duì)象引用作為單個(gè)參數(shù)。如前所述,因?yàn)榈湫偷膚eb服務(wù)基礎(chǔ)架構(gòu)不支持采用對(duì)象作為參數(shù)的方法調(diào)用,IComPlusObject將失敗且該服務(wù)對(duì)非傳統(tǒng)客戶機(jī)不可用。然而,示例性實(shí)施例提供通過允許用戶或開發(fā)員定義實(shí)現(xiàn)以下接口的服務(wù)代理來允許上述IComPlusObject接口被展示為web服務(wù)的機(jī)制[ServiceContract]interface ISurrogateInterface{void PlaceOrder(string productName,int quantity,int price);}開發(fā)員然后可通過創(chuàng)建服務(wù)代理以填入對(duì)傳統(tǒng)COM對(duì)象的PlaceOrder方法的IOrderDescription參數(shù)來實(shí)現(xiàn)該新的PlaceOrder函數(shù)。
注意,服務(wù)代理向web服務(wù)客戶機(jī)展示的代理接口不需要以任何方式相關(guān)于用于傳統(tǒng)組件的傳統(tǒng)接口。例如,代理接口可以含有與傳統(tǒng)接口不同數(shù)量的調(diào)用,且服務(wù)代理調(diào)用可以按照任何方式被映射至現(xiàn)有傳統(tǒng)調(diào)用。事實(shí)上,如將在以下更詳細(xì)描述,服務(wù)代理可被配置成處理請(qǐng)求或其部分而無需訪問傳統(tǒng)組件、或通過處理請(qǐng)求的一部分且依賴于傳統(tǒng)組件以提供其它所需的功能。作為其替代,或與其相結(jié)合,服務(wù)代理可被配置成通過應(yīng)用程序和服務(wù)代理的實(shí)例外部的其它系統(tǒng)來處理至少一部分請(qǐng)求。
例如,一個(gè)服務(wù)代理函數(shù)可調(diào)用多個(gè)現(xiàn)有或傳統(tǒng)的函數(shù),或多個(gè)服務(wù)代理函數(shù)可調(diào)用同一傳統(tǒng)組件。此外,如上所述,給定的服務(wù)代理函數(shù)甚至不需要訪問現(xiàn)有的傳統(tǒng)組件,而是選擇自己處理調(diào)用。以這種方式,代理也可成為將代碼從舊服務(wù)遷移至新服務(wù)應(yīng)用程序的一種方式。
可以理解,上述服務(wù)代理提供優(yōu)于現(xiàn)有機(jī)制的多個(gè)有利的特征,以向傳統(tǒng)組件提供web服務(wù)。例如,現(xiàn)有技術(shù)要求客戶機(jī)和服務(wù)器保持緊密耦合。這部分是由于客戶機(jī)必須使用服務(wù)器實(shí)現(xiàn)的同一接口的這一事實(shí)。同樣,對(duì)服務(wù)或其接口的任何修改也必須在web服務(wù)客戶機(jī)上更新。
然而,通過本發(fā)明的服務(wù)代理機(jī)制,web服務(wù)客戶機(jī)和由傳統(tǒng)組件提供的服務(wù)是松散耦合的。從而,盡管服務(wù)代理對(duì)現(xiàn)有傳統(tǒng)服務(wù)或傳統(tǒng)組件是透明的,但所展示的代理接口是客戶機(jī)可見的。客戶機(jī)然后使用由服務(wù)代理展示的該代理接口來通信。因?yàn)閣eb服務(wù)客戶機(jī)是從服務(wù)的傳統(tǒng)接口中抽象出來的,所以對(duì)提供服務(wù)的傳統(tǒng)組件或其接口的任何修改不需要更新web服務(wù)客戶機(jī)。盡管可能需要對(duì)服務(wù)代理進(jìn)行某些調(diào)整以適應(yīng)對(duì)應(yīng)用程序的修改,但是與更新web服務(wù)客戶機(jī)和/或重寫相比較,這些修改僅是少量的。另外,這些少量調(diào)整是由開發(fā)員控制的,且對(duì)服務(wù)代理這樣的修改也在開發(fā)員的技術(shù)水平和控制之內(nèi)。
本發(fā)明的另一有利特征是接口的去耦?,F(xiàn)有技術(shù)要求web服務(wù)接口上的方法調(diào)用的數(shù)量與傳統(tǒng)或服務(wù)器接口上的方法調(diào)用的數(shù)量匹配。因?yàn)閷?duì)用于創(chuàng)建web服務(wù)的元數(shù)據(jù)的使用創(chuàng)建了傳統(tǒng)接口至web服務(wù)的文字轉(zhuǎn)換,這樣的文字轉(zhuǎn)換(如上所述)可能不適于由傳統(tǒng)組件提供的所有服務(wù)。
如前所述,本發(fā)明允許代理接口與傳統(tǒng)接口不相關(guān)。從而,代理接口可含有與原始接口不同數(shù)量的方法調(diào)用,且服務(wù)代理方法調(diào)用可以按任何方式映射至現(xiàn)有方法。由此,開發(fā)員對(duì)web服務(wù)的互操作性、健壯性和效率有著更緊密的控制,而無需重寫傳統(tǒng)組件或傳統(tǒng)接口。此外,如前所述,因?yàn)榇斫涌趶挠糜谂c傳統(tǒng)組件通信傳統(tǒng)接口去耦,服務(wù)代理可成為將代碼從傳統(tǒng)服務(wù)遷移至新服務(wù)的一種方式。具體地,因?yàn)榻涌谌ヱ?,隨著時(shí)間的推移,每一服務(wù)可逐漸從傳統(tǒng)組件被遷移至服務(wù)代理。
本發(fā)明也方便地允許服務(wù)代理去耦。然而,現(xiàn)有技術(shù)要求接口的代理要與該接口的所有實(shí)例相關(guān)聯(lián)。然而,本發(fā)明允許用作現(xiàn)有服務(wù)的服務(wù)代理僅被松散地耦合至該服務(wù)。在逐個(gè)服務(wù)基礎(chǔ)上選取服務(wù)代理,這允許不同的服務(wù)具有不同的代理,即使這些服務(wù)可由相同的現(xiàn)有服務(wù)支持或?qū)崿F(xiàn)同一接口。
圖1B示出了上述本發(fā)明的各種示例實(shí)施例。如圖所示,分布式系統(tǒng)100提供用于不僅生成動(dòng)態(tài)web服務(wù)175(如上所述),還生成代理服務(wù)的實(shí)例116(此處被稱為“代理實(shí)例”、“服務(wù)代理的實(shí)例”或“服務(wù)代理實(shí)例”)的機(jī)制。對(duì)該特定實(shí)施例,分布式系統(tǒng)100提供包含web服務(wù)初始化器180和配置文件155的web服務(wù)基礎(chǔ)架構(gòu)122。在對(duì)應(yīng)用程序120(或通過其它實(shí)例)初始化后,web服務(wù)初始化器180可咨詢配置文件155,并確定將為由應(yīng)用程序125提供的一個(gè)或多個(gè)服務(wù)生成服務(wù)代理的實(shí)例116。該配置文件155可包含用于標(biāo)識(shí)將使用的服務(wù)和服務(wù)代理兩者的唯一標(biāo)識(shí)符。當(dāng)然,標(biāo)識(shí)和定位這樣的模塊的其它方式也可用于本發(fā)明。
注意,盡管服務(wù)代理的實(shí)例116是在初始化應(yīng)用程序125之后生成的,但存在初始化或生成服務(wù)代理實(shí)例116的其它方式。例如,如此處所述的服務(wù)代理實(shí)施例在上述靜態(tài)方法中也能同等地工作。從而,除非明確地要求保護(hù),否則使用web服務(wù)初始化器180在應(yīng)用程序125初始化之后對(duì)服務(wù)代理實(shí)例116的初始化僅是用于說明性的目的,而不意味著限制或縮小本發(fā)明的范圍。盡管如此,以上就用于初始化應(yīng)用程序和代理實(shí)例116的動(dòng)態(tài)web服務(wù)175所述的進(jìn)程也在本實(shí)施例中可用。例如,可從請(qǐng)求140的接收或從來自用戶在服務(wù)110處的輸入對(duì)應(yīng)用程序125和代理接口116進(jìn)行初始化。
無論服務(wù)代理實(shí)例116是如何被初始化的,類似于上述組件元數(shù)據(jù)160來訪問代理元數(shù)據(jù)104。代理元數(shù)據(jù)104描述用于與服務(wù)代理的實(shí)例116通信的服務(wù)代理和代理接口114(被稱為“SIF”)。代理元數(shù)據(jù)104可從目錄數(shù)據(jù)庫102中訪問,然后可被傳遞給服務(wù)基礎(chǔ)架構(gòu)122用于生成代理描述106。該服務(wù)描述又被傳遞給構(gòu)建器108用于生成服務(wù)代理實(shí)例116和代理接口114。注意,盡管代理實(shí)例114和動(dòng)態(tài)web服務(wù)175兩者的構(gòu)建器108被示為分開的組件,但這些構(gòu)建器108也可以是單個(gè)模塊。事實(shí)上,構(gòu)建器108可以是web服務(wù)基礎(chǔ)架構(gòu)122的一部分,甚至是web服務(wù)初始化器180的一部分。從而,除非明確地要求保護(hù),否則構(gòu)建器108模塊的位置僅用于方便和說明性的目的,而不意味著限制或縮小本發(fā)明的范圍。
一旦生成了代理實(shí)例116和代理接口114,可從web服務(wù)客戶機(jī)145接收對(duì)應(yīng)于與之相關(guān)聯(lián)的服務(wù)的請(qǐng)求140。當(dāng)在web服務(wù)基礎(chǔ)架構(gòu)122接收到請(qǐng)求消息140時(shí),該web服務(wù)基礎(chǔ)架構(gòu)可標(biāo)識(shí)被定向給由服務(wù)代理控制的服務(wù)的那些請(qǐng)求140(或其部分)。這些請(qǐng)求140然后通過代理接口114被直接傳遞給代理實(shí)例116。就在此時(shí),如前所述,取決于服務(wù)代理的配置,代理實(shí)例116可使用任何數(shù)量的進(jìn)程來處理請(qǐng)求140。
例如,代理實(shí)例116可被配置成處理請(qǐng)求140,而無需對(duì)傳統(tǒng)組件135進(jìn)行任何調(diào)用或傳遞任何參數(shù),從而將所有處理留給內(nèi)部函數(shù)?;蛘?,代理實(shí)例116可選擇對(duì)所有請(qǐng)求140的至少一部分,對(duì)傳統(tǒng)組件135進(jìn)行調(diào)用并對(duì)其傳遞參數(shù)115。而且,代理實(shí)例116可調(diào)用該應(yīng)用程序和代理實(shí)例116外部的其它系統(tǒng)112以處理請(qǐng)求140的任何一部分。另外,用于根據(jù)代理實(shí)例116處理請(qǐng)求的這些機(jī)制116、135、112的任何組合是在本發(fā)明的范圍之內(nèi)的,取決于自定義對(duì)象或服務(wù)代理的開發(fā)員配置。同樣注意,盡管其它系統(tǒng)112被示為在服務(wù)110外部,但是情況可能并不如此。例如,其它系統(tǒng)112可以是服務(wù)110內(nèi)的其它應(yīng)用程序。從而,除非明確地要求保護(hù),否則將其它系統(tǒng)112置于服務(wù)110外部?jī)H是用于說明性的目的,而不意味著限制或縮小本發(fā)明的范圍。
無論如何處理請(qǐng)求消息140,類似于動(dòng)態(tài)web服務(wù)175,代理實(shí)例116和/或代理接口114應(yīng)該了解該服務(wù)的消息交換模式以識(shí)別何時(shí)將從各個(gè)組件116、135、112接收返回值120。如果返回值120是消息交換模式的一部分,那么返回值120可以在響應(yīng)消息130中格式化,并被發(fā)送給web服務(wù)客戶機(jī)145。當(dāng)然,取決于返回值的類型(例如,如果該返回值是簡(jiǎn)單的已接收請(qǐng)求OK),可以需要或不需要對(duì)客戶機(jī)145的響應(yīng)130。
注意,代理實(shí)例116位于代理接口114和用于與傳統(tǒng)組件135通信的接口之間。如前所述,該有利特征允許將web服務(wù)客戶機(jī)145與由應(yīng)用程序125提供的現(xiàn)有服務(wù)松散地耦合。另外,代理接口114從用于與傳統(tǒng)組件135通信的傳統(tǒng)接口中去耦。這允許在傳統(tǒng)組件135內(nèi)修改,而不必升級(jí)客戶機(jī)145,也提供用于從傳統(tǒng)組件遷移至新服務(wù)的機(jī)制。然而注意,盡管代理接口114被示為分離的模塊,但代理接口是代理實(shí)例116的整體部分;從而可被認(rèn)為是代理實(shí)例116的一部分。
同樣注意,對(duì)由不被代理服務(wù)支持的應(yīng)用程序125提供的其它服務(wù),web服務(wù)初始化器180也產(chǎn)生動(dòng)態(tài)web服務(wù)175而不是服務(wù)代理實(shí)例116。從而,可期望工作良好的傳統(tǒng)組件接口的文字轉(zhuǎn)換使用動(dòng)態(tài)web服務(wù)175來轉(zhuǎn)置,其中調(diào)用和參數(shù)115如上所述被直接傳遞給傳統(tǒng)組件135。從而,該分布式系統(tǒng)可為適當(dāng)轉(zhuǎn)換的傳統(tǒng)組件的接口處理請(qǐng)求140;然而,在其它情況下不可操作或低效的服務(wù)可利用此處所述的服務(wù)代理進(jìn)程。
也注意到,盡管圖1A的傳統(tǒng)客戶機(jī)105未被示出,但是該代理服務(wù)實(shí)施例也提供對(duì)傳統(tǒng)客戶機(jī)105的支持。同樣注意,在應(yīng)用程序125終止之后,類似于如上所述的動(dòng)態(tài)web服務(wù)175,可通過將代理描述106發(fā)送給回收站175來刪除它,且代理服務(wù)實(shí)例116終止。從而,代理描述106、代理實(shí)例116和代理接口114將被關(guān)閉,使得在應(yīng)用程序下一次初始化之后,將生成新代理描述106、新代理實(shí)例116和新代理接口114。
最后,注意到,盡管圖1B以及圖1A內(nèi)的各種組件關(guān)于彼此被示為與web服務(wù)基礎(chǔ)架構(gòu)或其它模塊分離,但示例性實(shí)施例不限于任何類型的配置或模塊的布局。從而,圖1B和1A內(nèi)的模塊的位置和配置僅用于說明性的目的,而不意味著限制或縮小本發(fā)明的范圍。
作為對(duì)服務(wù)代理實(shí)施例的簡(jiǎn)要概述,服務(wù)代理被實(shí)現(xiàn)為對(duì)web服務(wù)基礎(chǔ)架構(gòu)122的兩個(gè)掛鉤。第一個(gè)掛鉤是在服務(wù)或應(yīng)用程序125啟動(dòng)過程中。如果服務(wù)代理被配置成用于服務(wù),那么web服務(wù)基礎(chǔ)架構(gòu)122使用元數(shù)據(jù)104來構(gòu)建用于構(gòu)造將被展示給web服務(wù)客戶機(jī)145的代理接口115的代理描述106。第二個(gè)掛鉤是在代理實(shí)例116創(chuàng)建過程中,其中如果服務(wù)代理被配置,那么除創(chuàng)建現(xiàn)有應(yīng)用程序125或服務(wù)的新實(shí)例以外,該基礎(chǔ)架構(gòu)也創(chuàng)建服務(wù)代理的新實(shí)例116。web服務(wù)基礎(chǔ)架構(gòu)122然后將其對(duì)傳統(tǒng)服務(wù)或應(yīng)用程序125的引用傳遞給服務(wù)代理實(shí)例116,且方法調(diào)用在服務(wù)代理而不是應(yīng)用程序125上分派。
本發(fā)明也可按照包含功能性步驟和/或非功能性動(dòng)作的方法來描述。以下是可在實(shí)現(xiàn)本發(fā)明時(shí)執(zhí)行的步驟和/或動(dòng)作的描述。通常,功能性步驟按照實(shí)現(xiàn)的結(jié)果來描述本發(fā)明,而非功能性動(dòng)作描述用于獲得特定結(jié)果的更具體動(dòng)作。盡管可以按特定的順序描述或要求保護(hù)功能性步驟和/或非功能性動(dòng)作,但本發(fā)明不必限于步驟和/或動(dòng)作的任何特定的順序或組合。而且,對(duì)權(quán)利要求書以及圖2和3的流程圖的以下描述中所述的步驟和/或動(dòng)作的使用被用于指示對(duì)這樣的術(shù)語的所期望的特定使用。
圖2和3示出了本發(fā)明的各個(gè)示例性實(shí)施例的流程圖。對(duì)圖2和3的以下描述將偶爾會(huì)參考來自圖1A、和1B中的相應(yīng)元素。盡管對(duì)來自這些附圖的特定元素進(jìn)行參考,但是除非明確地要求保護(hù),否則這些元素僅被用于說明性的目的,而不意味著限制或縮小本發(fā)明的范圍。
圖2示出了通過由開發(fā)員為經(jīng)由沒有被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信的傳統(tǒng)組件創(chuàng)建的自定義對(duì)象來提供web服務(wù)的方法200的流程圖。該自定義對(duì)象允許開發(fā)員更緊密地控制web服務(wù)的互操作性、健壯性和效率,而無需重寫傳統(tǒng)組件。方法200包括從web服務(wù)客戶機(jī)接收訪問由具有傳統(tǒng)組件的應(yīng)用程序提供的服務(wù)的請(qǐng)求的動(dòng)作205。例如,可在web服務(wù)基礎(chǔ)架構(gòu)122處從web服務(wù)客戶機(jī)145接收請(qǐng)求140以訪問由具有傳統(tǒng)組件135的應(yīng)用程序125提供的服務(wù),傳統(tǒng)組件135使用沒有被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口來通信。
之后,方法200包括用于使用服務(wù)代理來處理該請(qǐng)求的步驟220。更具體地,步驟220包括標(biāo)識(shí)該請(qǐng)求對(duì)應(yīng)于由服務(wù)代理控制的服務(wù)的動(dòng)作210。例如,當(dāng)在web服務(wù)基礎(chǔ)架構(gòu)122處接收到請(qǐng)求140時(shí),請(qǐng)求140可被標(biāo)識(shí)為對(duì)應(yīng)于服務(wù)代理,后者是由開發(fā)員創(chuàng)建的將代理接口114展示為web服務(wù)客戶機(jī)145與傳統(tǒng)接口之間的抽象的自定義對(duì)象。
步驟220還包括將至少一部分請(qǐng)求經(jīng)由代理接口傳遞給服務(wù)代理實(shí)例的動(dòng)作215。例如,web服務(wù)基礎(chǔ)架構(gòu)122在接收到請(qǐng)求140之后,可將至少一部分請(qǐng)求140通過代理接口114傳遞給服務(wù)代理實(shí)例116以供進(jìn)一步處理。服務(wù)代理實(shí)例116可被配置成通過對(duì)一個(gè)或多個(gè)傳統(tǒng)組件的調(diào)用、對(duì)服務(wù)代理實(shí)例116的調(diào)用或?qū)υ搼?yīng)用程序和該服務(wù)代理外部的其它系統(tǒng)112的調(diào)用中的一個(gè)或多個(gè)來處理至少一部分請(qǐng)求。
注意,服務(wù)代理實(shí)例116可在初始化應(yīng)用程序125之后生成。在這樣的情況中,以上方法也可包括接收停止應(yīng)用程序125的請(qǐng)求的動(dòng)作?;谠撏V箲?yīng)用程序125的請(qǐng)求,服務(wù)代理實(shí)例116也可以被自動(dòng)停止。而且,服務(wù)代理描述106也可被刪除,使得新的服務(wù)代理實(shí)例116和新的服務(wù)代理描述106將在應(yīng)用程序125的下一次初始化之后生成。
無論在何時(shí)生成服務(wù)代理實(shí)例116,代理描述106可用于生成代理服務(wù)實(shí)例116和代理接口114,其中代理描述106描述以下的一個(gè)或多個(gè)調(diào)用操作;參數(shù);或用于與一個(gè)或多個(gè)傳統(tǒng)組件135、服務(wù)代理實(shí)例116或應(yīng)用程序125和服務(wù)代理實(shí)例116外部的其它系統(tǒng)112通信的消息交換模式。
當(dāng)根據(jù)代理元數(shù)據(jù)104,基于代理描述106創(chuàng)建代理接口114時(shí),以上方法還可包括以下動(dòng)作。基于代理描述106,可為要求對(duì)web服務(wù)客戶機(jī)145的響應(yīng)的傳統(tǒng)組件135之一標(biāo)識(shí)消息交換模式。同樣,可從一個(gè)或多個(gè)傳統(tǒng)組件、服務(wù)代理實(shí)例116或應(yīng)用程序125和服務(wù)代理實(shí)例116外部的其它系統(tǒng)112中的一個(gè)或多個(gè)接收一個(gè)或多個(gè)返回值120。之后,服務(wù)代理實(shí)例116可用于將該一個(gè)或多個(gè)返回值120格式化成響應(yīng)130,然后將響應(yīng)發(fā)送給web服務(wù)客戶機(jī)145以供進(jìn)一步處理。
還注意,服務(wù)代理或其實(shí)例116可結(jié)合動(dòng)態(tài)web服務(wù)175使用,使得由傳統(tǒng)組件135提供的應(yīng)用程序125的其它服務(wù)可利用如此處所述的動(dòng)態(tài)web服務(wù)175。在這樣的情況中,如所述在組件元數(shù)據(jù)160內(nèi)的傳統(tǒng)接口的接口描述可用于為由具有一個(gè)或多個(gè)傳統(tǒng)組件135的應(yīng)用程序125提供的另一服務(wù)生成動(dòng)態(tài)web服務(wù)175??稍趹?yīng)用程序125初始化時(shí)生成動(dòng)態(tài)web服務(wù)175,其中動(dòng)態(tài)web服務(wù)175是傳統(tǒng)接口的文字轉(zhuǎn)換。在這種情況中,可通過另一服務(wù)器接收到相應(yīng)的另一服務(wù)請(qǐng)求消息140。web服務(wù)請(qǐng)求消息140可包含一個(gè)或多個(gè)參數(shù)和用于請(qǐng)求由一個(gè)或多個(gè)傳統(tǒng)組件135提供的服務(wù)的一個(gè)或多個(gè)操作。之后,動(dòng)態(tài)web服務(wù)175用于對(duì)該一個(gè)或多個(gè)傳統(tǒng)組件135作出一個(gè)或多個(gè)傳統(tǒng)調(diào)用115。該一個(gè)或多個(gè)參數(shù)115然后可被傳遞給該一個(gè)或多個(gè)傳統(tǒng)組件135以供進(jìn)一步處理。
在其它示例性實(shí)施例中,基于傳統(tǒng)接口描述,可為一個(gè)或多個(gè)傳統(tǒng)組件135標(biāo)識(shí)消息交換模式,使得需要對(duì)web服務(wù)客戶機(jī)145的響應(yīng)130。在這種情況中,可從該一個(gè)或多個(gè)傳統(tǒng)組件135接收一個(gè)或多個(gè)返回值120,其中動(dòng)態(tài)web服務(wù)175用于將該返回值120格式化成web服務(wù)響應(yīng)消息130。之后,該web服務(wù)響應(yīng)消息130被發(fā)送給web服務(wù)客戶機(jī)145以供進(jìn)一步處理。
圖3示出了用于提供由開發(fā)員為經(jīng)由沒有被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信的一個(gè)或多個(gè)傳統(tǒng)組件創(chuàng)建的自定義對(duì)象的初始化的方法300的流程圖。方法300包括接收初始化應(yīng)用程序的請(qǐng)求的動(dòng)作305。例如,服務(wù)110可接收初始化應(yīng)用程序125的請(qǐng)求,應(yīng)用程序125包含用于提供服務(wù)的傳統(tǒng)組件135。傳統(tǒng)組件135使用沒有被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信。初始化應(yīng)用程序的請(qǐng)求可響應(yīng)于來自web服務(wù)客戶機(jī)145的服務(wù)請(qǐng)求消息140而接收?;蛘?,初始化應(yīng)用程序125的請(qǐng)求可響應(yīng)于來自服務(wù)110計(jì)算設(shè)備處的用戶界面的輸入而接收。
基于該初始化應(yīng)用程序的請(qǐng)求,方法300也包含用于生成服務(wù)代理實(shí)例的步驟325。具體地,步驟325包括標(biāo)識(shí)將生成服務(wù)代理實(shí)例的動(dòng)作310。例如,在初始化應(yīng)用程序125之后,web服務(wù)初始化器180可咨詢配置文件155,它包含例如唯一標(biāo)識(shí)符和用于指示將在初始化應(yīng)用程序125之后生成服務(wù)代理實(shí)例116的其它信息。服務(wù)代理是由開發(fā)員創(chuàng)建的將代理接口114展示為web服務(wù)客戶機(jī)145與傳統(tǒng)接口之間的抽象的自定義對(duì)象。步驟325也包括訪問描述代理接口的元數(shù)據(jù)的動(dòng)作315。例如,可從目錄數(shù)據(jù)庫102訪問描述將被展示給web服務(wù)客戶機(jī)145的代理接口114的代理元數(shù)據(jù)104。
之后,步驟325包括使用元數(shù)據(jù)生成包含該代理接口的服務(wù)代理實(shí)例的動(dòng)作320。具體地,web服務(wù)初始化器180可使用代理元數(shù)據(jù)104來生成包含該代理接口114的服務(wù)代理實(shí)例116。服務(wù)代理實(shí)例116被配置成通過對(duì)一個(gè)或多個(gè)傳統(tǒng)組件135的調(diào)用、對(duì)服務(wù)代理實(shí)例116的調(diào)用或?qū)?yīng)用程序125和服務(wù)代理實(shí)例116外部的其它系統(tǒng)的調(diào)用中的一個(gè)或多個(gè)來處理來自web服務(wù)客戶機(jī)145的請(qǐng)求140的至少一部分。
代理元數(shù)據(jù)也可用于首先生成代理描述106,然后使用代理描述106來生成服務(wù)代理實(shí)例116和代理接口114。代理描述106描述以下的一個(gè)或多個(gè)調(diào)用操作;參數(shù);或用于與一個(gè)或多個(gè)傳統(tǒng)組件135、服務(wù)代理實(shí)例116或應(yīng)用程序125和服務(wù)代理實(shí)例116外部的其它系統(tǒng)112通信的消息交換模式。代理描述106可以是WSDL文檔。
此外,基于代理描述106,可標(biāo)識(shí)用于一個(gè)或多個(gè)傳統(tǒng)組件135的消息交換模式需要對(duì)web服務(wù)客戶機(jī)145的響應(yīng)130。之后,可從一個(gè)或多個(gè)傳統(tǒng)組件135、服務(wù)代理實(shí)例116或應(yīng)用程序125和服務(wù)實(shí)例116外部的其它系統(tǒng)112中的一個(gè)或多個(gè)接收一個(gè)或多個(gè)返回值120。服務(wù)代理實(shí)例116可用于將該一個(gè)或多個(gè)返回值120格式化成web服務(wù)響應(yīng)消息130。web服務(wù)響應(yīng)消息130然后可被發(fā)送給web服務(wù)客戶機(jī)145以供進(jìn)一步處理。
在其它示例性實(shí)施例中,動(dòng)態(tài)web服務(wù)175可結(jié)合代理實(shí)例116一起運(yùn)行。在該實(shí)施例中,來自組件元數(shù)據(jù)160的接口描述用于為由具有傳統(tǒng)組件135的應(yīng)用程序125提供的另一服務(wù)生成動(dòng)態(tài)web服務(wù)175。在應(yīng)用程序125初始化時(shí)生成的動(dòng)態(tài)web服務(wù)175是傳統(tǒng)接口的文字轉(zhuǎn)換。在該實(shí)施例中,可接收對(duì)應(yīng)于另一服務(wù)的另一服務(wù)請(qǐng)求消息140。web服務(wù)請(qǐng)求消息140可包含一個(gè)或多個(gè)參數(shù)(如果有),和用于請(qǐng)求由一個(gè)或多個(gè)傳統(tǒng)組件135提供的服務(wù)的一個(gè)或多個(gè)操作。動(dòng)態(tài)web服務(wù)175然后用于對(duì)傳統(tǒng)組件135作出一個(gè)或多個(gè)傳統(tǒng)調(diào)用115。參數(shù)115然后可被傳遞給傳統(tǒng)組件135中的一個(gè)或多個(gè)以供進(jìn)一步處理。
同樣在以上示例性實(shí)施例中,基于來自組件元數(shù)據(jù)160的傳統(tǒng)接口描述,為傳統(tǒng)組件135標(biāo)識(shí)消息交換模式,該模式要求對(duì)web服務(wù)客戶機(jī)145的響應(yīng)130。之后,可從傳統(tǒng)組件135接收一個(gè)或多個(gè)返回值120,其中動(dòng)態(tài)web服務(wù)175用于將該返回值120格式化成web服務(wù)響應(yīng)消息130。web服務(wù)響應(yīng)消息130然后可被發(fā)送給web服務(wù)客戶機(jī)145以供進(jìn)一步處理。web服務(wù)請(qǐng)求消息140和web服務(wù)響應(yīng)130以及此處所述的其它文檔都可以是XML文檔。
在動(dòng)態(tài)web服務(wù)175和代理實(shí)例116均同步運(yùn)行的情況中,其它示例性實(shí)施例允許在服務(wù)代理實(shí)例116和動(dòng)態(tài)web服務(wù)器175自動(dòng)停止或終止之后接收停止應(yīng)用程序125的請(qǐng)求。而且,刪除代理描述106和web服務(wù)描述150,使得將在應(yīng)用程序125下一次初始化之后,生成新服務(wù)代理實(shí)例116、新動(dòng)態(tài)web服務(wù)175、新代理描述106和新web服務(wù)描述150。
本發(fā)明范圍內(nèi)的實(shí)施例也包括用于攜帶或其上存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì)。這樣的計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)訪問的任何可用介質(zhì)。作為示例,而非限制,這樣的計(jì)算機(jī)可讀介質(zhì)可包括RAM、ROM、EPROM、CD-ROM或其它光盤存儲(chǔ)、磁盤存儲(chǔ)或其它磁性存儲(chǔ)設(shè)備,或可被用于以計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的形式攜帶或存儲(chǔ)所期望的程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問的任何其它介質(zhì)。當(dāng)通過網(wǎng)絡(luò)或另一通信連接(或是硬連線、無線或是硬連線或無線的組合)將信息傳送或提供給計(jì)算機(jī)時(shí),該計(jì)算機(jī)恰當(dāng)?shù)貙⒃撨B接視為計(jì)算機(jī)可讀介質(zhì)。因此,任何這樣的連接被恰當(dāng)?shù)胤Q為計(jì)算機(jī)可讀介質(zhì)。以上的組合也應(yīng)包含在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。計(jì)算機(jī)可執(zhí)行指令包括,例如,使得通用計(jì)算機(jī)、專用計(jì)算機(jī)或?qū)S锰幚碓O(shè)備執(zhí)行特定的一個(gè)或一組功能的指令和數(shù)據(jù)。
圖4及以下描述旨在提供可在其中實(shí)現(xiàn)本發(fā)明的合適的計(jì)算環(huán)境的簡(jiǎn)要概括描述。盡管不是必需的,但本發(fā)明將在諸如程序模塊等由網(wǎng)絡(luò)環(huán)境中的計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的通用語境中描述。一般而言,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型。計(jì)算機(jī)可執(zhí)行指令、相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)和程序模塊表示用于執(zhí)行此處所揭示的方法的步驟的程序代碼裝置的示例。這樣的可執(zhí)行指令或相關(guān)聯(lián)數(shù)據(jù)結(jié)構(gòu)的特定順序表示用于實(shí)現(xiàn)在這些步驟中所述的功能的相應(yīng)動(dòng)作的示例。
本領(lǐng)域的技術(shù)人員可以理解,本發(fā)明可以在具有多種類型的計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)現(xiàn),這些計(jì)算機(jī)系統(tǒng)配置包括個(gè)人計(jì)算機(jī)、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費(fèi)者電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型計(jì)算機(jī)等。本發(fā)明也可以在分布式計(jì)算環(huán)境中實(shí)現(xiàn),其中任務(wù)由通過通信網(wǎng)絡(luò)連接(或者通過硬連線、無線鏈路或通過硬連線或無線鏈路的組合)的本地和遠(yuǎn)程處理設(shè)備來執(zhí)行。在分布式計(jì)算環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。
參考圖4,用于實(shí)現(xiàn)本發(fā)明的示例系統(tǒng)包括常規(guī)計(jì)算機(jī)420形式的通用計(jì)算設(shè)備,包含處理單元421、系統(tǒng)存儲(chǔ)器422和將包括系統(tǒng)存儲(chǔ)器422在內(nèi)的各種系統(tǒng)組件耦合至處理單元421的系統(tǒng)總線423。系統(tǒng)總線423可以是若干類型的總線結(jié)構(gòu)中的任一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線和使用各種總線體系結(jié)構(gòu)中的任一種的局部總線。系統(tǒng)存儲(chǔ)器包括只讀存儲(chǔ)器(ROM)424和隨機(jī)存取存儲(chǔ)器(RAM)425?;据斎?輸出系統(tǒng)(BIOS)424包含有助于諸如啟動(dòng)時(shí)在計(jì)算機(jī)420中元件之間傳遞信息的基本例程,它可被存儲(chǔ)在ROM 424中。
計(jì)算機(jī)420還可以包括用于從磁硬盤439中讀取或向其寫入的磁硬盤驅(qū)動(dòng)器427,用于從可移動(dòng)磁盤429中讀取或向其寫入的磁盤驅(qū)動(dòng)器428,以及用于從諸如CD ROM或其它光學(xué)介質(zhì)等可移動(dòng)光盤431中讀取或向其寫入的光盤驅(qū)動(dòng)器430。磁硬盤驅(qū)動(dòng)器427、磁盤驅(qū)動(dòng)器428和光盤驅(qū)動(dòng)器430分別由硬盤驅(qū)動(dòng)器接口432、磁盤驅(qū)動(dòng)器接口433和光盤驅(qū)動(dòng)器接口434連接至系統(tǒng)總線423。驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)420提供了對(duì)計(jì)算機(jī)可執(zhí)行指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的非易失性存儲(chǔ)。盡管此處所示的示例性環(huán)境使用磁硬盤439、可移動(dòng)磁盤429和可移動(dòng)光盤431,也可以使用用于存儲(chǔ)數(shù)據(jù)的其它類型的計(jì)算機(jī)可讀介質(zhì),包括盒式磁帶、閃存卡、數(shù)字多功能盤、貝努利盒式磁盤、RAM、ROM等。
可以在硬盤439、磁盤429、光盤431、ROM 424或RAM 425上存儲(chǔ)包括一個(gè)或多個(gè)程序模塊的程序代碼裝置,包括操作系統(tǒng)435、一個(gè)或多個(gè)應(yīng)用程序模塊436、其它程序模塊437和程序數(shù)據(jù)438。用戶可以通過鍵盤440和定點(diǎn)設(shè)備442,或諸如麥克風(fēng)、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等其它輸入設(shè)備(未示出)向計(jì)算機(jī)420輸入命令和信息。這些和其它輸入設(shè)備通常由耦合至系統(tǒng)總線423的串行端口接口446連接至處理單元421。或者,輸入設(shè)備可以由諸如并行端口、游戲端口或通用串行總線(USB)等其它接口連接。監(jiān)視器447或另一顯示設(shè)備也經(jīng)由諸如視頻適配器448等接口連接至系統(tǒng)總線423。除監(jiān)視器之外,個(gè)人計(jì)算機(jī)一般包括其它外圍輸出設(shè)備(未示出),諸如揚(yáng)聲器和打印機(jī)。
計(jì)算機(jī)420可使用至一臺(tái)或多臺(tái)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)449a和449b的邏輯連接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)449a和449b各自可以是另一臺(tái)個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它常見網(wǎng)絡(luò)節(jié)點(diǎn),且通常包括上文相對(duì)于計(jì)算機(jī)420描述的許多或所有元件,盡管在圖4中只示出存儲(chǔ)器存儲(chǔ)設(shè)備450a和450b以及其相關(guān)聯(lián)的應(yīng)用程序436a和436b。圖4中所示邏輯連接包括此處作為示例而非限制示出的局域網(wǎng)(LAN)451和廣域網(wǎng)(WAN)452。這樣的網(wǎng)絡(luò)環(huán)境在辦公室范圍或企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。
當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)420通過網(wǎng)絡(luò)接口或適配器453連接至局域網(wǎng)451。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)420通常包括調(diào)制解調(diào)器454、無線鏈路或用于通過諸如因特網(wǎng)等廣域網(wǎng)452建立通信的其它裝置。調(diào)制解調(diào)器454可以是內(nèi)置或外置的,它通過串行端口接口446連接至系統(tǒng)總線423。在網(wǎng)絡(luò)化環(huán)境中,相對(duì)于計(jì)算機(jī)420所描述的程序模塊或其部分可以存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中??梢岳斫?,所示的網(wǎng)絡(luò)連接是示例性的,且可以使用通過廣域網(wǎng)452建立通信鏈路的其它手段。
本發(fā)明可以用其它具體形式來實(shí)施,而不背離其精神或本質(zhì)特征。所述的實(shí)施例在所有方面都被認(rèn)為僅是說明性的而非限制性的。從而,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述來指示。落入本發(fā)明權(quán)利要求書的等效技術(shù)方案的意義和范圍內(nèi)的所有變化都被包括在其范圍內(nèi)。
權(quán)利要求
1.一種在分布式系統(tǒng)的服務(wù)計(jì)算設(shè)備處的方法,所述方法通過由開發(fā)員為經(jīng)由未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信的傳統(tǒng)組件創(chuàng)建的自定義對(duì)象來提供web服務(wù),所述自定義對(duì)象允許開發(fā)員更緊密地控制web服務(wù)的互操作性、健壯性和效率,而無需重寫傳統(tǒng)組件,所述方法包括以下動(dòng)作從web服務(wù)接收對(duì)訪問由具有一個(gè)或多個(gè)傳統(tǒng)組件的應(yīng)用程序提供的服務(wù)的請(qǐng)求,所述傳統(tǒng)組件使用未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口來通信;標(biāo)識(shí)所述請(qǐng)求對(duì)應(yīng)于由服務(wù)代理控制的服務(wù),所述服務(wù)代理是由開發(fā)員創(chuàng)建的將代理接口展示為所述web服務(wù)客戶機(jī)和所述傳統(tǒng)接口之間的抽象的自定義對(duì)象;以及通過所述代理接口將所述請(qǐng)求的至少一部分傳遞給所述服務(wù)代理的實(shí)例以供進(jìn)一步處理,所述服務(wù)代理的實(shí)例被配置成通過對(duì)所述一個(gè)或多個(gè)傳統(tǒng)組件的調(diào)用、對(duì)所述服務(wù)代理實(shí)例的調(diào)用或?qū)λ鰬?yīng)用程序和所述服務(wù)代理實(shí)例外部的其它系統(tǒng)的調(diào)用中的一個(gè)或多個(gè)來處理所述請(qǐng)求的至少一部分。
2.如權(quán)利要求1所述的方法,其特征在于,所述服務(wù)代理是在初始化所述應(yīng)用程序的請(qǐng)求之后生成的。
3.如權(quán)利要求2所述的方法,其特征在于,使用代理描述來生成所述服務(wù)代理實(shí)例和所述代理接口,其中,所述代理描述描述了以下的一個(gè)或多個(gè)調(diào)用操作;參數(shù);或用于與所述一個(gè)或多個(gè)傳統(tǒng)組件、所述服務(wù)代理實(shí)例或所述應(yīng)用程序和服務(wù)代理實(shí)例外部的其它系統(tǒng)通信的消息交換模式。
4.如權(quán)利要求3所述的方法,其特征在于,還包括以下動(dòng)作接收停止所述應(yīng)用程序的請(qǐng)求;基于停止所述應(yīng)用程序的請(qǐng)求,自動(dòng)停止所述服務(wù)代理實(shí)例;以及刪除所述代理描述,使得在所述應(yīng)用程序的下一次初始化之后,將生成所述服務(wù)代理的新的實(shí)例和新的代理描述。
5.如權(quán)利要求1所述的方法,其特征在于,所述代理接口是基于代理描述創(chuàng)建的,所述方法還包括以下步驟基于所述代理描述,標(biāo)識(shí)用于所述一個(gè)或多個(gè)傳統(tǒng)組件的消息交換模式需要對(duì)所述web服務(wù)客戶機(jī)的響應(yīng);從所述一個(gè)或多個(gè)傳統(tǒng)組件、所述服務(wù)代理實(shí)例或所述應(yīng)用程序和服務(wù)代理實(shí)例外部的其它系統(tǒng)中的一個(gè)或多個(gè)接收一個(gè)或多個(gè)返回值;使用所述服務(wù)代理實(shí)例將所述一個(gè)或多個(gè)返回值格式化成web服務(wù)響應(yīng)消息;以及將所述web服務(wù)響應(yīng)消息發(fā)送給所述web服務(wù)客戶機(jī)以供進(jìn)一步處理。
6.如權(quán)利要求1所述的方法,其特征在于,基于所述傳統(tǒng)接口的接口描述,為由具有所述一個(gè)或多個(gè)傳統(tǒng)組件的應(yīng)用程序提供的另一服務(wù)生成動(dòng)態(tài)web服務(wù),所述動(dòng)態(tài)web服務(wù)是在所述應(yīng)用程序初始化時(shí)生成的,且其中,所述動(dòng)態(tài)web服務(wù)是對(duì)所述傳統(tǒng)接口的文字轉(zhuǎn)換,所述方法還包括以下動(dòng)作接收對(duì)應(yīng)于所述另一服務(wù)的另一服務(wù)請(qǐng)求消息,所述web服務(wù)請(qǐng)求消息包括一個(gè)或多個(gè)參數(shù),和用于請(qǐng)求由所述一個(gè)或多個(gè)傳統(tǒng)組件提供的服務(wù)的一個(gè)或多個(gè)操作;使用所述動(dòng)態(tài)web服務(wù)對(duì)所述一個(gè)或多個(gè)傳統(tǒng)組件作出一個(gè)或多個(gè)調(diào)用;以及將所述零個(gè)或多個(gè)參數(shù)傳遞給所述一個(gè)或多個(gè)傳統(tǒng)組件中的一個(gè)或多個(gè)以供進(jìn)一步處理。
7.如權(quán)利要求6所述的方法,其特征在于,還包括以下動(dòng)作基于所述動(dòng)態(tài)傳統(tǒng)接口描述,標(biāo)識(shí)用于所述一個(gè)或多個(gè)傳統(tǒng)組件的消息交換模式要求對(duì)所述web服務(wù)客戶機(jī)的響應(yīng);從所述一個(gè)或多個(gè)傳統(tǒng)組件接收一個(gè)或多個(gè)返回值;使用所述web服務(wù)將所述返回值格式化成web服務(wù)響應(yīng)消息;以及將所述web服務(wù)響應(yīng)消息發(fā)送給所述web服務(wù)客戶機(jī)以供進(jìn)一步處理。
8.一種在分布式系統(tǒng)的服務(wù)計(jì)算設(shè)備處的方法,所述方法初始化由開發(fā)員為經(jīng)由未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信的一個(gè)或多個(gè)傳統(tǒng)組件創(chuàng)建的自定義對(duì)象,所述自定義對(duì)象允許開發(fā)員更緊密地控制web服務(wù)的互操作性、健壯性和效率,而無需重寫一個(gè)或多個(gè)傳統(tǒng)組件,所述方法包括以下動(dòng)作接收初始化應(yīng)用程序的請(qǐng)求,所述應(yīng)用程序包含用于提供服務(wù)的一個(gè)或多個(gè)傳統(tǒng)組件,其中所述一個(gè)或多個(gè)傳統(tǒng)組件使用未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信;基于所述初始化應(yīng)用程序的請(qǐng)求,標(biāo)識(shí)將要生成服務(wù)代理實(shí)例,所述服務(wù)代理是由開發(fā)員創(chuàng)建的將代理接口展示為web服務(wù)客戶機(jī)與所述傳統(tǒng)接口之間的抽象的自定義對(duì)象;訪問描述將被展示給所述web服務(wù)客戶機(jī)的代理接口的元數(shù)據(jù);以及使用所述元數(shù)據(jù)生成包含所述代理接口的服務(wù)代理的實(shí)例,其中所述服務(wù)代理實(shí)例被配置成通過對(duì)所述一個(gè)或多個(gè)傳統(tǒng)組件的調(diào)用、對(duì)所述服務(wù)代理實(shí)例的調(diào)用或?qū)λ鰬?yīng)用程序和所述服務(wù)代理實(shí)例外部的其它系統(tǒng)的調(diào)用中的一個(gè)或多個(gè)處理來自所述web服務(wù)客戶機(jī)的請(qǐng)求的至少一部分。
9.如權(quán)利要求8所述的方法,其特征在于,所述初始化應(yīng)用程序的請(qǐng)求是響應(yīng)于來自所述web服務(wù)客戶機(jī)的服務(wù)請(qǐng)求消息而接收的。
10.如權(quán)利要求8所述的方法,其特征在于,所述初始化應(yīng)用程序的請(qǐng)求是響應(yīng)于來自服務(wù)計(jì)算設(shè)備處的用戶界面的輸入而接收的。
11.如權(quán)利要求8所述的方法,其特征在于,所述元數(shù)據(jù)用于首先生成代理描述,所述代理描述然后用于生成所述服務(wù)代理實(shí)例和所述代理接口。
12.如權(quán)利要求11所述的方法,其特征在于,所述代理描述描述了以下的一個(gè)或多個(gè)調(diào)用操作;參數(shù);或用于與所述一個(gè)或多個(gè)傳統(tǒng)組件、所述服務(wù)代理實(shí)例或所述應(yīng)用程序和服務(wù)代理實(shí)例外部的其它系統(tǒng)通信的消息交換模式。
13.如權(quán)利要求11所述的方法,其特征在于,所述代理描述是WSDL文檔。
14.如權(quán)利要求11所述的方法,其特征在于,還包括以下動(dòng)作基于所述代理描述,標(biāo)識(shí)用于所述一個(gè)或多個(gè)傳統(tǒng)組件的消息交換模式要求對(duì)所述web服務(wù)客戶機(jī)的響應(yīng);從所述一個(gè)或多個(gè)傳統(tǒng)組件、所述服務(wù)代理實(shí)例或所述應(yīng)用程序和服務(wù)代理實(shí)例外部的其它系統(tǒng)中的一個(gè)或多個(gè)接收一個(gè)或多個(gè)返回值;使用所述服務(wù)代理實(shí)例將所述一個(gè)或多個(gè)返回值格式化成web服務(wù)響應(yīng)消息;以及將所述web服務(wù)響應(yīng)消息發(fā)送給所述web服務(wù)客戶機(jī)以供進(jìn)一步處理。
15.如權(quán)利要求11所述的方法,其特征在于,基于所述傳統(tǒng)接口的接口描述,為由具有所述一個(gè)或多個(gè)傳統(tǒng)組件的應(yīng)用程序提供的另一服務(wù)生成動(dòng)態(tài)web服務(wù),所述動(dòng)態(tài)web服務(wù)在所述應(yīng)用程序的初始化時(shí)生成,且其中,所述動(dòng)態(tài)web服務(wù)是對(duì)所述傳統(tǒng)接口的文字轉(zhuǎn)換,所述方法還包括以下動(dòng)作接收對(duì)應(yīng)于所述另一服務(wù)的另一服務(wù)請(qǐng)求消息,所述另一服務(wù)請(qǐng)求消息包括用于請(qǐng)求由所述一個(gè)或多個(gè)傳統(tǒng)組件提供的另一服務(wù)的一個(gè)或多個(gè)操作;以及基于所述一個(gè)或多個(gè)操作,使用所述動(dòng)態(tài)web服務(wù)對(duì)所述一個(gè)或多個(gè)傳統(tǒng)組件作出一個(gè)或多個(gè)調(diào)用。
16.如權(quán)利要求15所述的方法,其特征在于,所述web服務(wù)請(qǐng)求消息還包括一個(gè)或多個(gè)參數(shù),所述方法還包括以下動(dòng)作將所述一個(gè)或多個(gè)參數(shù)傳遞給所述一個(gè)或多個(gè)傳統(tǒng)組件中的一個(gè)或多個(gè)以供進(jìn)一步處理。
17.如權(quán)利要求16所述的方法,其特征在于,還包括以下動(dòng)作基于所述傳統(tǒng)接口描述,標(biāo)識(shí)用于所述一個(gè)或多個(gè)傳統(tǒng)組件的消息交換模式要求對(duì)所述web服務(wù)客戶機(jī)的響應(yīng);從所述一個(gè)或多個(gè)傳統(tǒng)組件接收一個(gè)或多個(gè)返回值;使用所述動(dòng)態(tài)web服務(wù)將所述返回值格式化成web服務(wù)響應(yīng)消息;以及將所述web服務(wù)響應(yīng)消息發(fā)送給所述web服務(wù)客戶機(jī)以供進(jìn)一步處理。
18.如權(quán)利要求17所述的方法,其特征在于,還包括以下動(dòng)作接收停止所述應(yīng)用程序的請(qǐng)求;基于停止所述應(yīng)用程序的請(qǐng)求,自動(dòng)停止所述服務(wù)代理實(shí)例和所述動(dòng)態(tài)web服務(wù);以及刪除所述代理描述和所述web服務(wù)描述,使得在所述應(yīng)用程序的下一次初始化之后,將生成所述服務(wù)代理的新的實(shí)例、新的動(dòng)態(tài)web服務(wù)、新的代理描述和新的web服務(wù)描述。
19.如權(quán)利要求8所述的方法,其特征在于,還包括以下動(dòng)作接收停止所述應(yīng)用程序的請(qǐng)求;基于停止所述應(yīng)用程序的請(qǐng)求,自動(dòng)停止所述服務(wù)代理實(shí)例;以及刪除所述代理描述,使得在所述應(yīng)用程序的下一次初始化之后,將生成所述服務(wù)代理的新的實(shí)例和新的代理描述。
20.一種在分布式系統(tǒng)的服務(wù)計(jì)算設(shè)備處的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品用于實(shí)現(xiàn)一種方法,所述方法初始化由開發(fā)員為經(jīng)由未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信的一個(gè)或多個(gè)傳統(tǒng)組件創(chuàng)建的自定義對(duì)象,所述自定義對(duì)象允許開發(fā)員更緊密地控制web服務(wù)的互操作性、健壯性和效率,而無需重寫一個(gè)或多個(gè)傳統(tǒng)組件,所述計(jì)算機(jī)程序產(chǎn)品包含其上存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),當(dāng)所述計(jì)算機(jī)可執(zhí)行指令由處理器執(zhí)行時(shí),可使得所述分布式計(jì)算系統(tǒng)執(zhí)行以下動(dòng)作接收初始化應(yīng)用程序的請(qǐng)求,所述應(yīng)用程序包含用于提供服務(wù)的一個(gè)或多個(gè)傳統(tǒng)組件,其中所述一個(gè)或多個(gè)傳統(tǒng)組件使用未被開發(fā)成在web服務(wù)環(huán)境中通信的傳統(tǒng)接口通信;基于所述初始化應(yīng)用程序的請(qǐng)求,標(biāo)識(shí)將要生成服務(wù)代理實(shí)例,所述服務(wù)代理是由開發(fā)員創(chuàng)建的將代理接口展示為web服務(wù)客戶機(jī)與所述傳統(tǒng)接口之間的抽象的自定義對(duì)象;訪問描述將被展示給所述web服務(wù)客戶機(jī)的代理接口的元數(shù)據(jù);以及使用所述元數(shù)據(jù)生成包含所述代理接口的所述服務(wù)代理的實(shí)例,其中所述服務(wù)代理實(shí)例被配置成通過對(duì)所述一個(gè)或多個(gè)傳統(tǒng)組件的調(diào)用、對(duì)所述服務(wù)代理實(shí)例的調(diào)用或?qū)λ鰬?yīng)用程序和所述服務(wù)代理實(shí)例外部的其它系統(tǒng)的調(diào)用中的一個(gè)或多個(gè)來處理來自所述web服務(wù)客戶機(jī)的請(qǐng)求的至少一部分。
全文摘要
本發(fā)明的示例實(shí)施例提供用于允許開發(fā)員定義新接口并插入為在其它情況下不能在web服務(wù)環(huán)境中通信的傳統(tǒng)組件實(shí)現(xiàn)這些新接口的自定義轉(zhuǎn)換代碼。這些新接口然后可以按照從傳統(tǒng)組件接口中提取web服務(wù)客戶機(jī)的方式被展示給web服務(wù)客戶機(jī)。實(shí)現(xiàn)該新接口的對(duì)象在此處被稱為“服務(wù)代理”,新接口將通常被稱為“代理接口”。這些代理接口可以連同服務(wù)代理實(shí)例在提供服務(wù)的應(yīng)用程序啟動(dòng)之后被初始化。另外,對(duì)可能無需由服務(wù)代理提供的特征的那些服務(wù),動(dòng)態(tài)web服務(wù)可與服務(wù)代理同步運(yùn)行。
文檔編號(hào)H04L29/06GK1832476SQ20061000379
公開日2006年9月13日 申請(qǐng)日期2006年2月10日 優(yōu)先權(quán)日2005年3月8日
發(fā)明者A·D·米利根, H·賽德, J·D·多荻, M·A·菲恩古爾德, S·阿布拉漢 申請(qǐng)人:微軟公司