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