亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法

文檔序號:7953745閱讀:234來源:國知局
專利名稱:基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法,尤其是一種基于CAR(Component Assembly Runtime,零部件動態(tài)裝配)的中間件平臺,通過在該CAR中間件平臺上運(yùn)行CAR網(wǎng)絡(luò)服務(wù)代理程序提供網(wǎng)絡(luò)服務(wù)的方法。
背景技術(shù)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)服務(wù)的技術(shù)將以SOA(Service OrientedArchitecture,面向服務(wù)的架構(gòu))為架構(gòu),SOA是一個基于標(biāo)準(zhǔn)的組織和設(shè)計方法,是一個協(xié)議框架,它利用一系列網(wǎng)絡(luò)共享服務(wù),使IT能更緊密地服務(wù)于業(yè)務(wù)流程。通過采用能隱藏潛在技術(shù)復(fù)雜性的標(biāo)準(zhǔn)界面,SOA能提高IT資產(chǎn)的重用率,從而加快了開發(fā)并更加可靠地交付新的增強(qiáng)后的業(yè)務(wù)服務(wù)。
一般來說SOA包含三個基本組成元素服務(wù)使用者,服務(wù)提供者以及服務(wù)注冊中心。
以SOA概念為基礎(chǔ)的網(wǎng)絡(luò)服務(wù)技術(shù)是直接面向企業(yè)應(yīng)用程序集成,為半自動交互式和組織內(nèi)部的業(yè)務(wù)流程提供了公用數(shù)據(jù)交換平臺。構(gòu)成網(wǎng)絡(luò)服務(wù)的技術(shù)包括XML(Extensible Markup Language,擴(kuò)展性標(biāo)識語言)、HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議)、SOAP(Simple ObjectAccess Protocol,簡單對象訪問協(xié)議)和WSDL(Web Service DescriptionLanguage,網(wǎng)絡(luò)服務(wù)器描述語言)。XML用于定義網(wǎng)絡(luò)服務(wù)間消息的結(jié)構(gòu),HTTP是底層的通訊媒介,SOAP是交換消息的容器,WSDL用于描述網(wǎng)絡(luò)服務(wù)。
目前,市場上出現(xiàn)了許多網(wǎng)絡(luò)服務(wù)開發(fā)工具,這些網(wǎng)絡(luò)服務(wù)開發(fā)工具基本可以分為以下幾類企業(yè)級的網(wǎng)絡(luò)服務(wù)開發(fā)平臺該類開發(fā)工具的典型代表包括Microsoft.NET,Sun J2EE,IBM WebSphere,BEA WebLogic,Systinet Webservices,Apache XML ProjectAxis,Oracle 9i Application Server andJDeveloper,Borland JBuilder等。該類開發(fā)工具提供了從編程語言,應(yīng)用類庫到運(yùn)行環(huán)境等的一整套解決方案。主要優(yōu)勢在企業(yè)級的網(wǎng)絡(luò)服務(wù)開發(fā),是網(wǎng)絡(luò)服務(wù)的主流開發(fā)工具。
輕量級的網(wǎng)絡(luò)服務(wù)開發(fā)工具該類開發(fā)工具的典型代表包括gSOAP,SOAPLite,easySOAP等。該類開發(fā)工具的主要優(yōu)勢在于簡單易用或開放源碼等附加特性,該類工具往往不能提供一整套的網(wǎng)絡(luò)服務(wù)應(yīng)用類庫和開發(fā)平臺。
除了以上的兩類主流開發(fā)工具外,一些廠商還提供了一些網(wǎng)絡(luò)服務(wù)開發(fā)包,一個典型代表是Microsoft SOAP Toolkit(微軟SOAP工具包)。
上述網(wǎng)絡(luò)服務(wù)開發(fā)工具存在著如下所述的不足一方面,雖然目前市場上已經(jīng)出現(xiàn)了相當(dāng)多的網(wǎng)絡(luò)服務(wù)開發(fā)工具,但這些工具往往是基于重新建立的一整套體系結(jié)構(gòu),并未提供一種簡單有效的辦法復(fù)用原有中間件平臺(例如CORBA,Microsoft DCOM等)中的已有軟件產(chǎn)品。而實(shí)際情況是這些中間件平臺往往已經(jīng)被廣泛使用,基于這些中間件平臺的產(chǎn)品已達(dá)到相當(dāng)大的規(guī)模。另一方面,雖然一些軟件廠商也發(fā)布了一些網(wǎng)絡(luò)服務(wù)軟件開發(fā)包以簡化用戶利用原有中間件產(chǎn)品提供網(wǎng)絡(luò)服務(wù)的工作量,例如,Microsoft SOAPToolkit中提供的IDL(Interface Definition Language,接口定義語言)文件轉(zhuǎn)換工具,但每次發(fā)布一個原有軟件成品為網(wǎng)絡(luò)服務(wù)時,開發(fā)者仍然需要完成相當(dāng)?shù)闹貜?fù)工作量。

發(fā)明內(nèi)容
本發(fā)明的目的在于針對上述現(xiàn)有網(wǎng)絡(luò)服務(wù)開發(fā)工具存在的不足及缺陷,提供一種基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法,通過該方法可以復(fù)用原有中間件平臺中的已有軟件產(chǎn)品,并且減少重復(fù)的工作量。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法,該方法包括以下步驟步驟1、遠(yuǎn)程客戶的SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)服務(wù)器,網(wǎng)絡(luò)服務(wù)器在CAR中間件平臺上啟動CAR網(wǎng)絡(luò)服務(wù)代理程序;步驟2、所述CAR網(wǎng)絡(luò)服務(wù)代理程序解析所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包;步驟3、所述CAR網(wǎng)絡(luò)服務(wù)代理程序通過所述CAR中間件平臺完成所述SOAP請求或WSDL文件的下載請求的服務(wù)。
由上述技術(shù)方案可知,本發(fā)明是采用CAR構(gòu)件技術(shù)對SOA技術(shù)所提供的支持,為遠(yuǎn)程客戶提供網(wǎng)絡(luò)服務(wù)的。CAR構(gòu)件技術(shù)是面向構(gòu)件編程的編程模型,它規(guī)定了一組構(gòu)件間相互調(diào)用的標(biāo)準(zhǔn),使得二進(jìn)制構(gòu)件能夠自描述,能夠在運(yùn)行時動態(tài)鏈接。
CAR兼容微軟的COM(Component Object Model,組件對象模型),但是和微軟COM相比,CAR刪除了COM中過時的約定,禁止用戶定義COM的非自描述接口;完備了構(gòu)件及其接口的自描述功能,實(shí)現(xiàn)了對COM的擴(kuò)展;對COM的用戶界面進(jìn)行了簡化包裝,易學(xué)易用。
從上面的定義中,我們可以說CAR是微軟COM的一個子集,同時又對微軟的COM進(jìn)行了擴(kuò)展,在“和欣”SDK(Software Development Kit,軟件開發(fā)工具包)工具的支持下,使得高深難懂的構(gòu)件編程技術(shù)很容易被C/C++程序員理解并掌握。CAR的編程思想是“和欣”技術(shù)的精髓,它貫穿于整個技術(shù)體系的實(shí)現(xiàn)中。
CAR中間件平臺(CAR構(gòu)件運(yùn)行平臺)是操作系統(tǒng)的抽象層,操作系統(tǒng)通過CAR構(gòu)件技術(shù)實(shí)現(xiàn),提供各種構(gòu)件服務(wù),并將各種構(gòu)件服務(wù)在CAR中間件平臺上注冊為命名服務(wù)。命名服務(wù)機(jī)制屬于CAR構(gòu)件技術(shù)的一部分,CAR構(gòu)件技術(shù)通過命名服務(wù)機(jī)制提供一種發(fā)布,獲取,使用CAR構(gòu)件的方法,命名服務(wù)隸屬于CAR構(gòu)件技術(shù)的用戶接口部分。命名服務(wù)是一種以字符串為標(biāo)識的服務(wù),其定義為通過某個特定的名字獲得相應(yīng)的已注冊的服務(wù)接口的方式。服務(wù)程序可以通過操作系統(tǒng)的API(Application Programming Interface,應(yīng)用編程接口)函數(shù)向操作系統(tǒng)注冊和注銷自己的服務(wù)接口,而服務(wù)的使用者則可以通過API函數(shù)來獲取指定的服務(wù)接口。
綜上所述,本發(fā)明提供了一種簡單有效的辦法復(fù)用原有CAR中間件平臺中的已有軟件產(chǎn)品,使互聯(lián)網(wǎng)上的遠(yuǎn)程客戶可通過標(biāo)準(zhǔn)網(wǎng)絡(luò)服務(wù)協(xié)議訪問CAR中間件平臺(CAR構(gòu)件運(yùn)行平臺)上注冊為命名服務(wù)的構(gòu)件對象,實(shí)現(xiàn)了其它支持網(wǎng)絡(luò)服務(wù)開發(fā)的開發(fā)工具對CAR構(gòu)件的復(fù)用;且整個發(fā)布過程完全由CAR網(wǎng)絡(luò)服務(wù)運(yùn)行環(huán)境自動完成,對構(gòu)件開發(fā)者完全透明,也不需要構(gòu)件開發(fā)者額外完成任何工作,減少了開發(fā)者的工作量。
以下通過具體實(shí)施方式
并結(jié)合附圖對本發(fā)明做進(jìn)一步的詳細(xì)說明。


圖1為本發(fā)明所基于的CAR網(wǎng)絡(luò)服務(wù)系統(tǒng)的結(jié)構(gòu)示意圖;圖2為本發(fā)明基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法的流程圖;圖3為本發(fā)明基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法的具體實(shí)施例的流程圖;圖4為圖3所示具體實(shí)施例中查找命名服務(wù)對象的流程圖;圖5為圖3所示具體實(shí)施例中調(diào)用接口方法的流程圖;圖6為圖3所示具體實(shí)施例中CAR網(wǎng)絡(luò)服務(wù)代理所應(yīng)用的各功能模塊及相互關(guān)系示意圖。
具體實(shí)施例方式
參見圖1,其為本發(fā)明所基于的CAR網(wǎng)絡(luò)服務(wù)系統(tǒng)結(jié)構(gòu)示意圖,實(shí)現(xiàn)基于CAR中間件平臺提供網(wǎng)絡(luò)服務(wù)方法的技術(shù)的方案是在CAR中間件平臺之上運(yùn)行一個CAR網(wǎng)絡(luò)服務(wù)代理程序(CAR網(wǎng)絡(luò)服務(wù)代理)。該程序通過網(wǎng)絡(luò)服務(wù)器接收遠(yuǎn)程客戶通過互聯(lián)網(wǎng)發(fā)送來的服務(wù)請求(SOAP服務(wù)請求或WSDL文件下載請求),解析并完成客戶請求的服務(wù)。
參加圖2,其為本發(fā)明基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法的流程圖,包括如下步驟步驟201、當(dāng)遠(yuǎn)程客戶的SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)服務(wù)器時,所述網(wǎng)絡(luò)服務(wù)器在CAR中間件平臺上啟動CAR網(wǎng)絡(luò)服務(wù)代理程序;步驟202、所述CAR網(wǎng)絡(luò)服務(wù)代理程序解析所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包;步驟203、所述CAR網(wǎng)絡(luò)服務(wù)代理程序通過所述CAR中間件平臺完成所述SOAP請求或WSDL文件的下載請求的服務(wù)。
其中CAR網(wǎng)絡(luò)服務(wù)代理程序的主要功能為1、當(dāng)接收到客戶端的SOAP遠(yuǎn)程調(diào)用時,解析SOAP請求的數(shù)據(jù)包,并通過中間件平臺提供的遠(yuǎn)程方法調(diào)用機(jī)制轉(zhuǎn)發(fā)給命名服務(wù)構(gòu)件對象進(jìn)行處理,然后返回接口方法調(diào)用的結(jié)果;2、當(dāng)接收到客戶端的WSDL文檔下載請求的數(shù)據(jù)包時,解析WSDL文檔下載請求的數(shù)據(jù)包,并根據(jù)中間件平臺提供的服務(wù)發(fā)現(xiàn)機(jī)制找到對應(yīng)的命名服務(wù)構(gòu)件對象,并根據(jù)其元數(shù)據(jù)自動生成描述該服務(wù)細(xì)節(jié)的WSDL文件,并返回該文件。
從原理上來看,CAR網(wǎng)絡(luò)服務(wù)代理程序可以被實(shí)現(xiàn)為一個標(biāo)準(zhǔn)CGI(Common Gateway Interface,公用網(wǎng)關(guān)接口)程序。但在實(shí)際的應(yīng)用中,考慮到效率(CGI程序與網(wǎng)絡(luò)應(yīng)用程序服務(wù)器的交互相比構(gòu)件接口調(diào)用效率較低)和靈活性,CAR網(wǎng)絡(luò)服務(wù)代理程序通過CAR構(gòu)件進(jìn)行實(shí)現(xiàn)。
基于面向?qū)ο蟮脑O(shè)計思想,CAR網(wǎng)絡(luò)服務(wù)代理程序可進(jìn)一步劃分為多個功能模塊分別用CAR構(gòu)件實(shí)現(xiàn)。
參見圖3,其為本發(fā)明的基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法的具體實(shí)施例的流程圖,其步驟為步驟301、當(dāng)遠(yuǎn)程客戶的SOAP請求的數(shù)據(jù)包或WSDL文件下載請求的數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)服務(wù)器時,所述網(wǎng)絡(luò)服務(wù)器在CAR中間件平臺之上啟動CAR網(wǎng)絡(luò)服務(wù)代理程序;步驟302、所述CAR網(wǎng)絡(luò)服務(wù)代理程序創(chuàng)建CAR網(wǎng)絡(luò)服務(wù)代理模塊實(shí)例,初始化CAR網(wǎng)絡(luò)服務(wù)代理模塊實(shí)例,并獲取CAR網(wǎng)絡(luò)服務(wù)器狀態(tài)信息;步驟303、所述CAR網(wǎng)絡(luò)服務(wù)代理模塊實(shí)例接收所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包,創(chuàng)建HTTP數(shù)據(jù)包讀/寫模塊實(shí)例,并調(diào)用該實(shí)例解析所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包的HTTP包頭,獲得所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包的的URL(Uniform Resoure Locator,統(tǒng)一資源定位器);步驟304、創(chuàng)建CAR命名服務(wù)代理模塊實(shí)例,并向該實(shí)例傳入所述URL;步驟305、調(diào)用所述CAR命名服務(wù)代理模塊實(shí)例查找所述CAR中間件平臺中是否存在與所述的SOAP請求或WSDL文件的下載請求相對應(yīng)的命名服務(wù)對象,如果是,執(zhí)行步驟306,否則執(zhí)行步驟317;步驟306、獲取所述命名服務(wù)對象的接口指針;步驟307、判斷所述的SOAP請求或WSDL文件的下載請求是否為HTTP GET請求,如果是,則執(zhí)行步驟308,如果不是,步驟則執(zhí)行步驟311;步驟308、調(diào)用CAR命名服務(wù)代理模塊實(shí)例提供的方法獲所述命名服務(wù)對象的元數(shù)據(jù);獲取所述命名服務(wù)對象的元數(shù)據(jù)主要通過CAR構(gòu)件運(yùn)行平臺提供的反射(Reflection)API完成;步驟309、創(chuàng)建WSDL文件生成模塊實(shí)例,將所述的元數(shù)據(jù)和服務(wù)器狀態(tài)信息傳入該實(shí)例,并通過該實(shí)例生成WSDL文件;步驟310、將WSDL文件的內(nèi)容拷貝到HTTP返回數(shù)據(jù)包中,通過HTTP數(shù)據(jù)包讀/寫模塊實(shí)例輸出HTTP返回數(shù)據(jù)包,然后執(zhí)行步驟318;步驟311、創(chuàng)建編碼/解碼模塊實(shí)例,并對所述SOAP請求的數(shù)據(jù)包進(jìn)行解碼;步驟312、創(chuàng)建SOAP數(shù)據(jù)包讀/寫模塊的實(shí)例,并通過該實(shí)例解析解碼后的的SOAP請求的數(shù)據(jù)包;步驟313、通過調(diào)用所述CAR命名服務(wù)代理模塊實(shí)例提供的方法來調(diào)用所述命名服務(wù)對象的接口方法;步驟314、判斷接口方法調(diào)用是否發(fā)生錯誤,如果是,則執(zhí)行步驟316,否則執(zhí)行步驟315;步驟315、編碼/解碼模塊實(shí)例對要輸出的數(shù)據(jù)進(jìn)行編碼,并通過SOAP數(shù)據(jù)包讀/寫模塊實(shí)例和HTTP數(shù)據(jù)包讀/寫模塊實(shí)例輸出SOAP結(jié)果(Response)數(shù)據(jù)包,然后執(zhí)行步驟318;
步驟316、編碼/解碼模塊實(shí)例對要輸出的數(shù)據(jù)進(jìn)行編碼,并通過SOAP數(shù)據(jù)包讀寫模塊實(shí)例和HTTP數(shù)據(jù)包讀寫模塊實(shí)例輸出SOAP錯誤(Fault)數(shù)據(jù)包,然后執(zhí)行步驟318;步驟317、HTTP數(shù)據(jù)包讀/寫模塊實(shí)例返回錯誤信息;步驟318、結(jié)束。
本實(shí)施例中,步驟305的查找CAR中間件平臺中是否存在與用戶請求相對應(yīng)的命名服務(wù)對象的過程參見圖4,其具體操作可以為步驟401、CAR命名服務(wù)代理模塊實(shí)例取得URL后,從字符串中過濾掉CAR網(wǎng)絡(luò)服務(wù)代理程序的路徑信息;步驟402、解析出剩余字符串的兩級目錄名分別保存為名字服務(wù)名稱和代理的接口名稱;步驟403、根據(jù)名字服務(wù)名稱和代理的接口名稱在CAR中間件平臺中查找是否存在所述命名服務(wù)對象,如果是,則執(zhí)行步驟306,否則執(zhí)行步驟317;本實(shí)施例中,步驟313所述調(diào)用其代理的命名服務(wù)對象的相應(yīng)的接口方法的過程參見圖5,其具體操作可以為步驟501、讀取調(diào)用接口方法的元數(shù)據(jù),為輸出參數(shù)分配內(nèi)存空間;步驟502、按照接口方法元數(shù)據(jù)將輸入?yún)?shù),輸出參數(shù)壓棧;其中輸入?yún)?shù)為所述SOAP請求的數(shù)據(jù)包中的信息;步驟503、使用匯編語言編寫的硬件平臺相關(guān)的指令調(diào)用接口方法;步驟504、讀取參數(shù)棧中的輸出參數(shù)值并返回。
參見圖6,其為圖3所示具體實(shí)施例中CAR網(wǎng)絡(luò)服務(wù)代理程序所應(yīng)用的各功能模塊及相互關(guān)系示意圖。在實(shí)際的程序運(yùn)行過程中,各個模塊功能的實(shí)現(xiàn)是通過動態(tài)的創(chuàng)建并調(diào)用各個模塊的實(shí)例來完成的。
CAR網(wǎng)絡(luò)服務(wù)代理程序所應(yīng)用的模塊包括CAR網(wǎng)絡(luò)服務(wù)代理模塊、HTTP數(shù)據(jù)包讀/寫模塊、SOAP數(shù)據(jù)包讀/寫模塊、編碼/解碼模塊、CAR命名服務(wù)代理模塊、WSDL文件生成模塊。下面分別對各個模塊進(jìn)行說明。
CAR網(wǎng)絡(luò)服務(wù)代理模塊主要功能為與網(wǎng)絡(luò)服務(wù)器的交互以及控制網(wǎng)絡(luò)服務(wù)代理處理流程。用于接收服務(wù)器發(fā)送過來的整個HTTP數(shù)據(jù)包(SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包),并調(diào)用其他模塊進(jìn)行處理,并將處理返回的數(shù)據(jù)傳給服務(wù)器。
HTTP數(shù)據(jù)包讀/寫模塊用于處理和生成HTTP請求(Request)和結(jié)果(Response)數(shù)據(jù)包;被CAR網(wǎng)絡(luò)服務(wù)代理模塊調(diào)用來處理和生成HTTP數(shù)據(jù)包頭部;該模塊封裝了HTTP數(shù)據(jù)包的讀寫操作。其中HTTP協(xié)議本身是標(biāo)準(zhǔn)WWW協(xié)議。
SOAP數(shù)據(jù)包讀/寫模塊用于處理和生成SOAP請求(Request)、結(jié)果(Response)和錯誤(Fault)數(shù)據(jù)包;被CAR網(wǎng)絡(luò)服務(wù)代理模塊使用來處理和生成SOAP數(shù)據(jù)包;該模塊用于封裝SOAP數(shù)據(jù)包的讀寫操作。SOAP協(xié)議本身也是標(biāo)準(zhǔn)WWW(World Wide Web,萬維網(wǎng))協(xié)議,除了需要遵循SOAP協(xié)議的打包解包格式外,SOAP數(shù)據(jù)包讀/寫模塊還需要維護(hù)CAR數(shù)據(jù)類型與XSD(SOAP)數(shù)據(jù)類型之間的轉(zhuǎn)換關(guān)系當(dāng)解析SOAP數(shù)據(jù)包時,將輸入?yún)?shù)的XSD數(shù)據(jù)類型轉(zhuǎn)換為CAR數(shù)據(jù)類型;當(dāng)寫入SOAP數(shù)據(jù)包時,將輸出參數(shù)CAR數(shù)據(jù)類型轉(zhuǎn)換為XSD數(shù)據(jù)類型。
最后,考慮到效率,該模塊處理SOAP數(shù)據(jù)包時是邊讀取邊處理(或者邊處理邊寫入),而不是一次將所有數(shù)據(jù)讀取到內(nèi)存。采用這種方法的優(yōu)點(diǎn)是可以在不明顯增加時間復(fù)雜度的前提下最大程度的減小處理過程的空間復(fù)雜度。
編碼/解碼模塊用于對SOAP數(shù)據(jù)包UTF-8,Base64,hex格式文本的編碼解碼,其中UTF-8為系統(tǒng)中的默認(rèn)編碼方式。該模塊將編碼數(shù)據(jù)解碼為編碼前的原始數(shù)據(jù),或者將要傳輸?shù)臄?shù)據(jù)進(jìn)行編碼。例如,為了傳輸類型為Byte數(shù)組的參數(shù),必須將數(shù)組中存儲的數(shù)據(jù)內(nèi)容經(jīng)過編碼后才可能被包括在SOAP數(shù)據(jù)包中進(jìn)行傳輸。
CAR命名服務(wù)代理模塊用于轉(zhuǎn)發(fā)網(wǎng)絡(luò)服務(wù)的調(diào)用請求以及獲取代理服務(wù)實(shí)例元數(shù)據(jù);被CAR構(gòu)件代理程序調(diào)用,用于進(jìn)行與CAR構(gòu)件實(shí)例的交互。該模塊用于封裝所有對CAR命名服務(wù)構(gòu)件實(shí)例的訪問,也就是說,其它任何模塊中都不會直接和CAR命名服務(wù)構(gòu)件實(shí)例產(chǎn)生任何交互,而只是調(diào)用該模塊的功能來實(shí)現(xiàn)對構(gòu)件命名服務(wù)的訪問。通過該模塊使得CAR構(gòu)件代理程序不需要直接與CAR中間件平臺進(jìn)行交互,從而屏蔽了中間件平臺特性,為以后移植到其它中間件平臺做好了準(zhǔn)備。
WSDL文件生成模塊該模塊用于根據(jù)輸入的CAR構(gòu)件實(shí)例的元數(shù)據(jù)和網(wǎng)絡(luò)服務(wù)器信息生成WSDL格式文檔。具體來說,CAR命名服務(wù)構(gòu)件實(shí)例的接口元數(shù)據(jù)用于生成WSDL文檔的Type Scheme(類型聲明),PortType(端口類型),Message(消息)部分;CAR命名服務(wù)構(gòu)件實(shí)例的實(shí)例元數(shù)據(jù)用于生成WSDL文檔的Port(端口)(主要是指SOAP Address(地址))部分,目前的實(shí)現(xiàn)中采用如下的命名規(guī)則“http://HOST[:PORT]/CARWSStubPath/SERVICE/INTERFACE.car”,其中HOST表示主機(jī)名稱,PORT表示網(wǎng)絡(luò)服務(wù)器監(jiān)聽的端口,CARWSStubPath表示CAR網(wǎng)絡(luò)服務(wù)代理程序所存儲的路徑,SERVICE表示CAR命名服務(wù)構(gòu)件名稱,INTERFACE表示接口名稱;網(wǎng)絡(luò)服務(wù)器信息用于設(shè)置WSDL文檔的Binding(綁定)部分使用的網(wǎng)絡(luò)協(xié)議載體信息(HTTP協(xié)議),文檔Namespace(名字空間)以及使用的SOAP協(xié)議版本號,編碼方式(默認(rèn)使用RPC方式)。
網(wǎng)絡(luò)服務(wù)器從功能上看,該系統(tǒng)中的網(wǎng)絡(luò)服務(wù)器應(yīng)該是一個標(biāo)準(zhǔn)的網(wǎng)絡(luò)應(yīng)用程序服務(wù)器,因此原則上可使用包括SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協(xié)議),HTTP在內(nèi)的任意類型網(wǎng)絡(luò)服務(wù)器,其與CAR網(wǎng)絡(luò)服務(wù)代理程序的交互方式遵循網(wǎng)絡(luò)應(yīng)用程序服務(wù)器與應(yīng)用程序的標(biāo)準(zhǔn)交互方式即可(例如CGI方式),在實(shí)際的應(yīng)用中,基于和欣2.0操作系統(tǒng)的CAR網(wǎng)絡(luò)服務(wù)系統(tǒng)創(chuàng)建了一個構(gòu)件化的簡單HTTP網(wǎng)絡(luò)服務(wù)器(這里以及本文以后的內(nèi)容均基于HTTP協(xié)議進(jìn)行討論)來實(shí)現(xiàn)的,其主要原因?yàn)榫W(wǎng)絡(luò)服務(wù)標(biāo)準(zhǔn)協(xié)議SOAP和WSDL是構(gòu)建于已被廣泛使用的網(wǎng)絡(luò)協(xié)議(例如HTTP等)之上的基于XML的應(yīng)用層協(xié)議,所有通過互聯(lián)網(wǎng)的遠(yuǎn)程請求必須以這些網(wǎng)絡(luò)協(xié)議之一作為載體來傳輸數(shù)據(jù),其中目前被最廣泛使用的就是HTTP協(xié)議;和欣2.0操作系統(tǒng)上還沒有實(shí)現(xiàn)或者移植任何通用的或嵌入式的HTTP服務(wù)器;和欣2.0操作系統(tǒng)定位為嵌入式操作系統(tǒng),不需要實(shí)現(xiàn)一個功能強(qiáng)大的HTTP服務(wù)器。
上述方法簡化了發(fā)布中間件平臺上的命名服務(wù)構(gòu)件為網(wǎng)絡(luò)服務(wù)的整個過程一方面,無需對系統(tǒng)中已有的構(gòu)件進(jìn)行任何修改;另一方面,該過程的實(shí)現(xiàn)只需要運(yùn)行一個網(wǎng)絡(luò)服務(wù)器,無需進(jìn)行復(fù)雜的配置。完成啟動過程后,所有CAR中間件平臺上的命名服務(wù)構(gòu)件對象均可自動通過標(biāo)準(zhǔn)網(wǎng)絡(luò)服務(wù)協(xié)議被遠(yuǎn)程客戶訪問。目前實(shí)現(xiàn)了對WSDL和SOAP協(xié)議的支持。
對于WSDL文件下載請求,按照網(wǎng)絡(luò)服務(wù)標(biāo)準(zhǔn),網(wǎng)絡(luò)服務(wù)都應(yīng)該通過WSDL服務(wù)描述文件進(jìn)行自描述,并發(fā)布到互聯(lián)網(wǎng)。目前的實(shí)現(xiàn)通過HTTP協(xié)議完成,客戶端可通過HTTP URL格式來下載WSDL文件。例如通過“http://HOST[:PORT]/CARWSStubPath/SERVICE/INTERFACE.wsdl”的HTTPURL格式來下載WSDL文件。所有命名服務(wù)構(gòu)件實(shí)例的WSDL描述由CAR網(wǎng)絡(luò)服務(wù)代理程序在運(yùn)行時自動生成。
下面是一個發(fā)布加法器構(gòu)件實(shí)例為網(wǎng)絡(luò)服務(wù)的具體實(shí)施例,首先需要創(chuàng)建一個CAR構(gòu)件實(shí)例并注冊為命名服務(wù),如下代碼所示,定義一個加法器CAR構(gòu)件,該構(gòu)件實(shí)現(xiàn)了接口ICalculator。
component calculator{interface ICalculator{HRESULT Add([in]long a,[in]long b,[out]long*c);}}假設(shè)用戶將該構(gòu)件的一個實(shí)例被注冊為名稱為calculator的CAR命名服務(wù)(通過CAR命名服務(wù)機(jī)制提供的API EzRegisterService)。則用戶可通過HTTP URL“http://HOST[:PORT]/CARWSStubPath/cal culator.wsdl”獲取描述該服務(wù)的WSDL文件。WSDL文件內(nèi)容如下< xml version="1.0"encoding="UTF-8" >
<definitions name="calculator"targetNamespace="urn:car-remote-service"xmlns:tns="urn:car-remote-service"xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/"xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="AddReq">
<part name="a"type="xsd:int"/>
<part name="b"type="xsd:int"/>
</message>
<message name="AddRes">
<part name="result"t ype="xsd:int"/>
<part name="c"type="xsd:int"minOccurs="0"maxOccurs="1"nillable="true"/>
</message>
<portType name="CARIfPortType">
<operation name="Add"parameter0rder="abc">
<input message="tns:AddReq"/>
<output message="tns:AddRes"/>
</operation>
</portType>
<binding name="calculatorICalculatorBinding"
type="tns:CARIfPortType">
<SOAP:binding style="rpc"transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Add">
<SOAP:operation style="rpc"soapAction=""/>
<input>
對于SOAP服務(wù)請求,由于SOAP和WSDL為標(biāo)準(zhǔn)的網(wǎng)絡(luò)服務(wù)協(xié)議,所以任何第三方網(wǎng)絡(luò)服務(wù)客戶端開發(fā)工具開發(fā)的應(yīng)用程序均可以訪問該網(wǎng)絡(luò)服務(wù)。
仍然以上面一個發(fā)布加法器構(gòu)件實(shí)例為網(wǎng)絡(luò)服務(wù)為例,其SOAP服務(wù)請求的數(shù)據(jù)包的內(nèi)容如下(不包含HTTP協(xié)議頭部)。注意對于不同的開發(fā)工具,生成SOAP Request(請求)的XML文檔格式可能略有出入,但內(nèi)容是一致的。
< xml version="1.0"encoding="UTF-8" >
<SOAP-ENV:Envelopexmlns:SOAp-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:ns1="urn:car-remote-service">
<SOAP-ENV:Body id="_0"SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns1:Add>
<a>0</a>
<b>0</b>
</ns1:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
接收到上如所示的輸入信息后,經(jīng)過CAR網(wǎng)絡(luò)網(wǎng)絡(luò)服務(wù)代理的處理后,會向戶返回如下的SOAP結(jié)果數(shù)據(jù)包
< xml version="1.0"encoding="UTF-8" >
<SOAP-ENV:Envelopexmlns:SOAP-EN="http://schemas.xmlsoap.org/soap/envelope/"xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:ns1="urn:car-remote-service">
<SOAP-ENV:Body id="_0"SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns1:AddResponse>
<result>0</result>
<c>0</c>
</ns1:AddRe sponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
最后所應(yīng)說明的是,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法,其特征在于包括以下步驟步驟1、當(dāng)遠(yuǎn)程客戶的SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)服務(wù)器時,所述網(wǎng)絡(luò)服務(wù)器在CAR中間件平臺上啟動CAR網(wǎng)絡(luò)服務(wù)代理程序;步驟2、所述CAR網(wǎng)絡(luò)服務(wù)代理程序解析所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包;步驟3、所述CAR網(wǎng)絡(luò)服務(wù)代理程序通過所述CAR中間件平臺完成所述SOAP請求或WSDL文件的下載請求的服務(wù)。
2.根據(jù)權(quán)利要求1所述的基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法,其特征在于所述步驟2具體為步驟201、創(chuàng)建CAR網(wǎng)絡(luò)服務(wù)代理模塊實(shí)例,初始化CAR網(wǎng)絡(luò)服務(wù)代理模塊實(shí)例,并獲取CAR網(wǎng)絡(luò)服務(wù)器狀態(tài)信息;步驟202、所述CAR網(wǎng)絡(luò)服務(wù)代理模塊實(shí)例接收所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包,創(chuàng)建HTTP數(shù)據(jù)包讀/寫模塊實(shí)例,并調(diào)用該實(shí)例解析所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包的HTTP包頭,獲得所述SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包的URL;所述步驟3具體為步驟301、創(chuàng)建CAR命名服務(wù)代理模塊實(shí)例,并向該實(shí)例傳入所述URL;步驟302、調(diào)用所述的CAR命名服務(wù)代理模塊實(shí)例查找所述的CAR中間件平臺中是否存在與所述的SOAP請求或WSDL文件的下載請求相對應(yīng)的命名服務(wù)對象,如果存在,執(zhí)行步驟303,否則執(zhí)行步驟314;步驟303、獲取與所述的命名服務(wù)對象的接口指針;步驟304、判斷所述的SOAP請求或WSDL文件的下載請求是否為HTTP GET請求,如果是,則執(zhí)行步驟305,如果不是,則執(zhí)行步驟308;步驟305、調(diào)用CAR命名服務(wù)代理模塊實(shí)例提供的方法獲取所述命名服務(wù)對象的元數(shù)據(jù);步驟306、創(chuàng)建WSDL文件生成模塊實(shí)例,將所述的元數(shù)據(jù)和服務(wù)器狀態(tài)信息傳入該實(shí)例,并通過該實(shí)例生成WSDL文件;步驟307、將WSDL文件的內(nèi)容拷貝到HTTP返回數(shù)據(jù)包中,通過HTTP數(shù)據(jù)包讀/寫模塊實(shí)例輸出所述HTTP返回數(shù)據(jù)包,然后執(zhí)行步驟315;步驟308、創(chuàng)建編碼/解碼模塊實(shí)例,并對所述SOAP請求的數(shù)據(jù)包進(jìn)行解碼;步驟309、創(chuàng)建SOAP數(shù)據(jù)包讀/寫模塊的實(shí)例,并通過該實(shí)例解析解碼后的SOAP請求的數(shù)據(jù)包;步驟310、通過調(diào)用所述CAR命名服務(wù)代理模塊實(shí)例的方法來調(diào)用所述命名服務(wù)對象的接口方法;步驟311、判斷在調(diào)用所述接口方法過程中是否發(fā)生錯誤,如果是,則執(zhí)行步驟313,否則執(zhí)行步驟312;步驟312、編碼/解碼模塊實(shí)例對要輸出的數(shù)據(jù)進(jìn)行編碼,并通過SOAP數(shù)據(jù)包讀寫模塊實(shí)例和HTTP數(shù)據(jù)包讀寫模塊實(shí)例輸出SOAP結(jié)果數(shù)據(jù)包;然后執(zhí)行步驟315;步驟313、編碼/解碼模塊實(shí)例對要輸出的數(shù)據(jù)進(jìn)行編碼,并通過SOAP數(shù)據(jù)包讀寫模塊實(shí)例和HTTP數(shù)據(jù)包讀寫模塊實(shí)例輸出SOAP錯誤數(shù)據(jù)包,然后執(zhí)行步驟315;步驟314、所述HTTP數(shù)據(jù)包讀/寫模塊實(shí)例返回錯誤信息;步驟315、結(jié)束。
3.根據(jù)權(quán)利要求2所述的基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法,其特征在于所述步驟302的具體操作為步驟3021、CAR命名服務(wù)代理模塊實(shí)例取得URL后,從字符串中過濾掉CAR網(wǎng)絡(luò)服務(wù)代理的路徑信息;步驟3022、解析出剩余字符串的兩級目錄名分別保存為名字服務(wù)名稱和代理的接口名稱;步驟3023、根據(jù)所述名字服務(wù)名稱和代理的接口名稱在CAR中間件平臺中查找是否存在所述命名服務(wù)對象,如果是,則執(zhí)行步驟303,否則執(zhí)行步驟314。
4.根據(jù)權(quán)利要求2或3所述的基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法,其特征在于所述步驟310中,所述調(diào)用其代理的命名服務(wù)對象的相應(yīng)的接口方法的具體操作為步驟3101、讀取所述接口方法的元數(shù)據(jù),為輸出參數(shù)分配內(nèi)存空間;步驟3102、按照所述元數(shù)據(jù)將輸入?yún)?shù),輸出參數(shù)壓棧;步驟3103、使用匯編語言編寫的硬件平臺相關(guān)的指令調(diào)用接口方法;步驟3104、讀取參數(shù)棧中的輸出參數(shù)值并返回。
全文摘要
本發(fā)明公開了一種基于中間件平臺提供網(wǎng)絡(luò)服務(wù)的方法,該方法包括網(wǎng)絡(luò)服務(wù)器在CAR中間件平臺上啟動CAR網(wǎng)絡(luò)服務(wù)代理程序,通過該程序解析SOAP請求的數(shù)據(jù)包或WSDL文件的下載請求的數(shù)據(jù)包,并通過CAR中間件平臺完成SOAP請求或WSDL文件的下載請求的服務(wù)。通過該方法復(fù)用原有CAR中間件平臺中的已有軟件產(chǎn)品,使互聯(lián)網(wǎng)上的遠(yuǎn)程客戶可通過標(biāo)準(zhǔn)網(wǎng)絡(luò)服務(wù)協(xié)議訪問CAR中間件平臺上注冊為命名服務(wù)的構(gòu)件對象,以實(shí)現(xiàn)其它支持網(wǎng)絡(luò)服務(wù)開發(fā)的開發(fā)工具對CAR構(gòu)件的復(fù)用。
文檔編號H04L29/06GK1819588SQ200610024440
公開日2006年8月16日 申請日期2006年3月7日 優(yōu)先權(quán)日2006年3月7日
發(fā)明者陳榕, 范典, 劉亞東, 蘇翼鵬, 梁宇洲 申請人:上??铺┦兰o(jì)科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1