在和欣操作系統(tǒng)上實明的 WEB SERVICE組件
關(guān)鍵詞 “和欣”嵌入式操作系統(tǒng) CAR WEB SERVICE
引 言
嵌入式Internet是近幾年隨著嵌入式系統(tǒng)的廣泛應(yīng)用和計算機網(wǎng)絡(luò)技術(shù)的發(fā)展而興起的一項技術(shù)。嵌入式系統(tǒng)憑借其以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ)、軟件硬件可裁剪的特點,贏得了巨大的市場,在應(yīng)用數(shù)量上遠(yuǎn)遠(yuǎn)超過了各種通用計算機。隨著Internet的發(fā)展,各種設(shè)備都產(chǎn)生了連接性的需求,從冰箱到電表,似乎所有電器都需要連入因特網(wǎng)。通過為現(xiàn)有嵌入式系統(tǒng)增加因特網(wǎng)接入能力來擴(kuò)展其功能,以Internet為介質(zhì)實現(xiàn)信息交互的過程,這就產(chǎn)生了嵌入式Intefnet技術(shù)。
當(dāng)前,在諸多的嵌入式操作系統(tǒng)上開發(fā)應(yīng)用的模式與傳統(tǒng)的桌面應(yīng)用開發(fā)方式相差無幾,基本上采用強類型的系統(tǒng)編程語言(如C、Java)及其相應(yīng)的開發(fā)模式來進(jìn)行。隨著嵌入式設(shè)備特別是移動設(shè)備的逐漸普及,這些設(shè)備上的應(yīng)用需求量遠(yuǎn)遠(yuǎn)大于桌面應(yīng)用的需求量,應(yīng)用的變化速度也相當(dāng)驚人。傳統(tǒng)模式的開發(fā)周期長的弱點就暴露了出來,因此在應(yīng)用開發(fā)中應(yīng)引入新的開發(fā)模式以適應(yīng)新形勢的發(fā)展。
但是在家電高度智能化的今天,僅僅對傳統(tǒng)的計算機進(jìn)行軟件集成是不夠的,還必須考慮到各種嵌入式設(shè)備。如何讓各種手機、PDA使用原先只有傳統(tǒng)計算機才能實現(xiàn)的服務(wù),如何將電視機、微波爐等家電無縫集成到分布式系統(tǒng)中而不再需要驅(qū)動,這些都對計算機軟件體系提出了新的挑戰(zhàn)。本文利用“和欣”嵌入式操作系統(tǒng)的WEBSERVICE構(gòu)件解決了上述問題。
1 和欣嵌入式操作系統(tǒng)和CAR構(gòu)件技術(shù)
1.1 和欣嵌入式操作系統(tǒng)
“和欣”嵌入式操作系統(tǒng)是一個我國完全自主研發(fā)、完全自主知識產(chǎn)權(quán)的國際先進(jìn)的嵌入式操作系統(tǒng),在國內(nèi)是最適合嵌入式設(shè)備搭建而向服務(wù)軟件結(jié)構(gòu)基礎(chǔ)的嵌入式操作系統(tǒng)。
“和欣”嵌入式操作系統(tǒng)是一個基于構(gòu)件化軟件模型的系統(tǒng),構(gòu)件化軟件設(shè)計思想貫穿于整個系統(tǒng)的設(shè)計與實現(xiàn)中。系統(tǒng)實現(xiàn)本身就是構(gòu)件模式,除內(nèi)核中最底層的控制部分外,所有系統(tǒng)功能都是以構(gòu)件接口形式提供的。另外,操作系統(tǒng)為構(gòu)件化軟件模型提供了必要的運行環(huán)境,來源不同的構(gòu)件可以在該環(huán)境上實現(xiàn)互操作。系統(tǒng)提供了構(gòu)件自動尋址/自動加載機制,用戶不必知道調(diào)用的構(gòu)件程序是本地的還是來自子網(wǎng)上。也就是說,構(gòu)件運行環(huán)境可以對用戶透明,構(gòu)件化系統(tǒng)的實現(xiàn),使得操作系統(tǒng)本身具有高度的靈活性和擴(kuò)展性。“和欣”采用的構(gòu)件技術(shù)是CAR技術(shù)。
1.2 CAR構(gòu)件技術(shù)
CAR(Component Application Run-Time)是一個國內(nèi)自主知識產(chǎn)權(quán)的構(gòu)件系統(tǒng),是由上??铺┦兰o(jì)科技有限公司開發(fā)的新一代的構(gòu)件系統(tǒng)。其主要特點是從操作系統(tǒng)層面上引入“構(gòu)件”的概念,所有的服務(wù)都由構(gòu)件來提供,從而實現(xiàn)軟件的目標(biāo)代碼級的重用。CAR是新一代的構(gòu)件系統(tǒng),為網(wǎng)絡(luò)編程和網(wǎng)絡(luò)服務(wù)提供了強大的支持。同時,CAR是一個面向構(gòu)件的編程模型,它表現(xiàn)為一組編程規(guī)范,包括構(gòu)件、類、對象、接口等定義與訪問構(gòu)件對象的規(guī)定。
2 在“和欣”上實現(xiàn)WEB SERVICE組件
2.1 “和欣”WEB SERVICE組件總體架構(gòu)
“和欣”WEB SERVICE組件主要由以下幾部分組成:XML解析器(此處僅實現(xiàn)了1個DOM解析器),1個基于XML解析器的SOAP文檔解析器,1個基于XML解析器的WSDL文檔解析器和生成器,1個CGI(作為HTTP服務(wù)器)以及1個基于XML解析器的WEB SERVICE配置文檔解析器??傮w上WEB SERVICE提供的組件如圖l所示。
整個組件的主程序就是一個CGI的HTTP服務(wù)器,在啟動時就調(diào)用配置文件解析器。配置文件是一個XML文檔,用于配置和發(fā)布WEB SERVICE方法,包括HTTP服務(wù)的端口號,系統(tǒng)中的WEB SERVICE方法(將是一些CAR組件)及其調(diào)用方式和輸入/輸出參數(shù)等。之后就把這些內(nèi)容存放在內(nèi)存中,對配置的SOCKET端口進(jìn)行偵聽,等待HTTP請求。HTTP服務(wù)器接收的HTTP WEBSERVICE請求包括HTTP GET/POST和SOAP兩種,服務(wù)器接收到SOAP請求之后就通過SOAP解析器進(jìn)行解析,確定調(diào)用的是哪個WEB SERVICE方法,找到后就調(diào)用相應(yīng)的CAR組件,并輸入?yún)?shù);用SOAP解析器將得到的結(jié)果包裝成一個結(jié)果SOAP文檔,然后從原端口返回給客戶。
這里只提供了簡單的SOAP接口解析,要進(jìn)行客戶端編程時可以使用;而且“和欣”嵌入式操作系統(tǒng)上已有標(biāo)準(zhǔn)瀏覽器,只需要改動部分代碼,即可直接使用。
以下就仔細(xì)介紹各部分的實現(xiàn)和提供的API。
2.2 XML解析器
選定DOM解析器實現(xiàn),暫時不提供SAX接口。因為在嵌入式系統(tǒng)上提供的WEB SERVICE文檔通常不大,所以采用DOM不會出現(xiàn)效率問題。
“和欣”DOM API的實現(xiàn)參照了W3上的DOM規(guī)范,由于是嵌入式系統(tǒng)的關(guān)系,對W3的開源代碼xercesc接口進(jìn)行了裁剪和變更。
另外在編寫DOM接口之前,參照MFC的String類編寫了一個簡單的String類,包含最基本的字符串操作。其中字符串全部使用UTF-8存儲,具體函數(shù)參照MFC的String類,這里不在贅述。
“和欣”DOM API的主要“類”包括:
①Decument類。Document對象代表了整個XML的文檔。所有其他的Node,都以一定的順序包含在Docu-ment對象之內(nèi),排列成一個樹形的結(jié)構(gòu)。
②Node類。Node對象是DOM結(jié)構(gòu)中最為基本的對象,代表了文檔樹中的一個抽象節(jié)點。在實際使用時,很少會真正地用到Node對象,而是使用諸如Element、Attr、Text等Node對象的子對象來操作文檔。Node對象為這些對象提供了一個抽象的、公共的根。雖然在Node對象中定義了對其子節(jié)點進(jìn)行存取的方法,但是有一些Node子對象(如Text對象)并不存在子節(jié)點,這一點是要注意的。
③NodeList類。NodeList類,顧名思義,就是代表了一個包含了一個或者多個Node的列表。可以簡單地把它看作一個Nodc的數(shù)組,僅僅是為了方便Node中的某些函數(shù)使用。
④Element類。Element類代表的是XML文檔中的標(biāo)簽元素,繼承于Node,也是Node最主要的子類。在標(biāo)簽中可以包含有屬性,因而Element對象中有存取其屬性的方法,而任何Node中定義的方法,也可以用在Element對象上。
⑤Attr類。Attr類代表了某個標(biāo)簽中的屬性,繼承于Node。
這是一個簡化的DOM解析器,大大降低了代碼的復(fù)雜度。由于在嵌入式設(shè)備中存儲空間甚至比內(nèi)存都寶貴,所以XML文件不會很大,雖然有一些在大XML文件中會降低效率的修改,但是在實際使用中不會有影響。
2.3 SOAP解析器
擁有了DOM解析器,可以方便地構(gòu)造一個SOAP解析器,用來解析SOAP文件,得到客戶端的SOAP請求以及解析得到SOAP中的結(jié)果。同時,也可以把結(jié)果數(shù)據(jù)包裝成SOAP文件,返回給服務(wù)器端。
“和欣”SOAP API的主要“類”包括:
①Soapheader類。Soapheader類繼承自Doeunaent類,Decument類的方法它都可以使用。Soapheader類主要是處理Actor和MustUnderstand兩個屬性。
②Soapbody類。Soapbodyr類繼承自Document類。它的處理比較復(fù)雜,暫時直接使用Document類的方法,只有一個產(chǎn)生錯誤SCIAP的方法。
③Soapclass類。Soapclass類繼承自Document類,Document類的方法它都可以使用;另外它利用Soapheader和Soapbody類做一些額外的操作以降低代碼復(fù)雜度(Soapbody類現(xiàn)在還沒什么用)。Soapclass類有一些包裝用的函數(shù),以降低編程復(fù)雜度。
2.4 WEB SERVICE部署文件
前面已經(jīng)說過,WEB SERVICE方法由CAR組件的形式編寫。那么如何讓HTTP服務(wù)器找到并且動態(tài)裝載這些WEB SERVICE方法,如何確定輸入/輸出參數(shù),HTTP服務(wù)器又將運行在什么端口上呢?這些都需要人為進(jìn)行配置。所以定義一個WEB SERVICE的部署文件,以便在“和欣”上配置WEB SERVICE。WEB SERVICE部署文件的結(jié)構(gòu)如下:
其中:domainname是指本機的域名;seTvicesocket則是指HTTP CGI在哪個端口進(jìn)行偵聽,啟動服務(wù)時會首先檢查這一項,默認(rèn)為80??梢源嬖诙鄠€soapaction>,每一個對應(yīng)一個相應(yīng)的WEB SERVICE方法;屬性uri是相對路徑,加上服務(wù)器的IP或者足域名可以組成整個URL。dllname是指相應(yīng)的CAR編譯成的DLL的名字,這樣HTTP CGI解析到相應(yīng)的WEB SERVICE方法,就可以直接裝載褶應(yīng)的DLL。但是注意DLL一定要注冊過,才能被程序正確加載。如果這個函數(shù)是一個類的成員函數(shù),那么這個類的名稱必須在classname>中指出。function>就是要調(diào)用的CAR的方法。uuid>是這種方法的UUID,供以后擴(kuò)展時使用。后面的Params>表示這個函數(shù)有幾個參數(shù),后面的3個參數(shù)表示變量名(在實際調(diào)用中投有什么用)、變量類型以及變量是輸入還是輸出,由于CAR接口的函數(shù)返回值都是HRESULT,所以沒有返同值的設(shè)置。
2.5 WSDL組件
UDDI和WSDL是WEB SERVICE系列協(xié)議的精華部分,正是由于這兩個協(xié)議的出現(xiàn),才可以由程序動態(tài)地使用別人發(fā)布的WEB SERVICE方法。但是現(xiàn)在UDDI還沒有和DNS一樣普及起來,所以在“和欣”WEB SERVICE中的處理方法,設(shè)置一個GETWSDL的WEB SERVICE方法。這種方法的作用就是根據(jù)配置文件生成在此機器上提供的WSDL文件,并且返回給請求的客戶端。這樣客戶端程序就可以根據(jù)WSDL來查找相應(yīng)的方法。
2.6 HTTP服務(wù)器
這個部件其實是在整個“和欣”WEB SERVICE組件中的主程序部分,啟動分析配置文件、監(jiān)聽網(wǎng)絡(luò)端口,分析HTTP請求.動態(tài)調(diào)用CAR DLL中的函數(shù),調(diào)用SDAP和DOM組件把結(jié)果包裝成SOAP返回客戶端,都是此部件的功能。首先簡單介紹一下“和欣”網(wǎng)絡(luò)編程接口(e1asock API)
“和欣”提供了一組套接口函數(shù)用于網(wǎng)絡(luò)編程,統(tǒng)稱為elasock API。與wlnsock一樣,“和欣”的elasock也是從BSD socket發(fā)展而來的。elasock APl可以實現(xiàn)基本的網(wǎng)絡(luò)通信功能,具體用法參見每個函數(shù)的文檔。elasock與Wiosock基本兼容。“和欣”提供的elasock的錯誤代碼與winsock有些不同。
有了elasock API和上述開發(fā)的部件,利用“和欣”CAR技術(shù)可以構(gòu)造此部件。此部件的運行流程如圖2所示。
首先啟動主函數(shù),分析部署文件有哪些WEB SERVICE方法,再找出監(jiān)聽端口,監(jiān)聽HTTP請求。此請求包括直接的HTTP GET/POST方式的請求和SOAP方式的請求。如果檢測到合法的請求,就到解析過的部署文件中去尋找相應(yīng)的WEB SERVICE方法;如果沒有找到或者出了其他問題,就返回一個SOAP錯誤給客戶端。
如果一切正常,就到解析過的部署文件巾尋找相應(yīng)的CAR方法,動態(tài)加載,運行相應(yīng)的函數(shù),得到結(jié)果,并且把結(jié)果包裝成SOAP協(xié)議,返回給客戶端。主程序在一個循環(huán)內(nèi)一直監(jiān)聽此端口,直到程序關(guān)閉。
3 總結(jié)與展望
本文利用“和欣”嵌入式操作系統(tǒng)的SDK和CAR原理,構(gòu)造了一個XML和WEB SERVICE組件。通過這個組件,可以開發(fā)一個CAR作為WEB SERVICE方法,再在WEB SERVICE部署文件中配置此CAR,就可以簡單地在WEB SERVICE組件中發(fā)布此方法。
“和欣”嵌入式操作系統(tǒng)現(xiàn)在可以運行在x86、ARM等CPU上,且科泰世紀(jì)同濟(jì)大學(xué)基礎(chǔ)軟件中心的其他同事已經(jīng)針對數(shù)字電視和對智能手機實現(xiàn)了“和欣”嵌入式操作系統(tǒng)的裁剪,使“和欣”嵌入式操作系統(tǒng)能夠順利地運行在數(shù)字電視和手機上。所以可以簡單地把寫好的CAR作為WEB SERVICE方法發(fā)布在經(jīng)過裁剪的“和欣”嵌入式操作系統(tǒng)上,就可以使得數(shù)字電視和智能手機擁有直接提供XML based WEB SERVICE的方法。在不久的將來,隨著我國信息化進(jìn)程的加快,很快就會有大量的內(nèi)嵌“和欣”、使用WEB SERVICE的智能電器出現(xiàn),并且深入我國生產(chǎn)和生活的方方面面,為提高生產(chǎn)力、提高人民生活水平起到極大的推動作用。
評論