摘要:頻繁斷連性、通信不對(duì)稱性、用戶數(shù)據(jù)訪問模式多變性、移動(dòng)終端能源有限性是移動(dòng)計(jì)算環(huán)境的典型特征。如何能在如此“苛刻”的條件下保證數(shù)據(jù)訪問的高效性、時(shí)效性和安全性是研究的重點(diǎn)。文章詳細(xì)分析了智能客戶端技術(shù)在移動(dòng)計(jì)算環(huán)境中特點(diǎn)和優(yōu)勢(shì),在此基礎(chǔ)上,提出了實(shí)現(xiàn)智能客戶端的一些關(guān)鍵問題及其解決方案,最后對(duì)智能客戶端的安全性問題作了介紹。
關(guān)鍵詞:智能客戶端;移動(dòng)計(jì)算;智能設(shè)備;Web服務(wù);數(shù)據(jù)集
0 引言
隨著計(jì)算機(jī)技術(shù)、無線通信技術(shù)、移動(dòng)終端技術(shù)的發(fā)展,移動(dòng)計(jì)算技術(shù)作為一種新型的技術(shù)應(yīng)運(yùn)而生。移動(dòng)計(jì)算技術(shù)給人們對(duì)信息的訪問帶來了極大的方便。人們可以利用移動(dòng)終端設(shè)備方便地從信息源訪問所需信息。移動(dòng)計(jì)算環(huán)境中用戶規(guī)模龐大,通信的上下行鏈路不對(duì)稱,通信鏈路的頻繁斷連性等給移動(dòng)計(jì)算環(huán)境中數(shù)據(jù)的組織、分發(fā)帶來了極大的挑戰(zhàn)。如何能在此“苛刻”的環(huán)境中提高數(shù)據(jù)訪問效率、降低數(shù)據(jù)的訪問代價(jià)是一個(gè)重要的研究課題。.NET平臺(tái)上的智能客戶端技術(shù)(smart Client),充分利用現(xiàn)有各種客戶端開發(fā)技術(shù)的優(yōu)點(diǎn),使得移動(dòng)應(yīng)用的開發(fā)更為高效、便捷。本文論述了智能客戶端技術(shù)在移動(dòng)計(jì)算環(huán)境中的優(yōu)勢(shì),并具體給出了一些關(guān)鍵問題的解決方案,最后對(duì)智能客戶端的安全問題做了介紹。
1 移動(dòng)計(jì)算環(huán)境下面臨的問題
(1)移動(dòng)環(huán)境下網(wǎng)絡(luò)的自適應(yīng)
無線網(wǎng)絡(luò)環(huán)境中,網(wǎng)絡(luò)通斷的處理是移動(dòng)計(jì)算系統(tǒng)必須要解決的問題。對(duì)于一般網(wǎng)絡(luò)斷開的情形,經(jīng)常被當(dāng)成一種網(wǎng)絡(luò)錯(cuò)誤來處理,導(dǎo)致系統(tǒng)的異常中止。而在無線狀態(tài)下,斷連應(yīng)該當(dāng)成一種特定的網(wǎng)絡(luò)通信狀態(tài)來處理,短暫的網(wǎng)絡(luò)中斷不應(yīng)該終止,系統(tǒng)應(yīng)仍能按照業(yè)務(wù)邏輯使用本地保存的數(shù)據(jù)進(jìn)行計(jì)算,待網(wǎng)絡(luò)重新聯(lián)通后和服務(wù)器進(jìn)行數(shù)據(jù)同步和計(jì)算結(jié)果的提交,實(shí)現(xiàn)無縫的離,在線切換。
(2)客戶端程序的部署和更新
在移動(dòng)計(jì)算平臺(tái)中,客戶端應(yīng)用程序部署在各種移動(dòng)智能設(shè)備上,由于設(shè)備的多樣性,軟件部署必須具備跨平臺(tái)能力,即需部署方式簡單,又能充分利用本地硬件資源,減少無線網(wǎng)絡(luò)數(shù)據(jù)傳輸量。
(3)客戶端數(shù)據(jù)緩存
移動(dòng)計(jì)算通常需要在本地緩存數(shù)據(jù)。當(dāng)無線網(wǎng)絡(luò)連接不可用時(shí),緩存數(shù)據(jù)提供應(yīng)用程序脫機(jī)工作所需的數(shù)據(jù),保證應(yīng)用程序仍然可以正常運(yùn)行。
(4)計(jì)算數(shù)據(jù)的同步與沖突處理
由于移動(dòng)計(jì)算的需要,系統(tǒng)應(yīng)提供本地修改數(shù)據(jù)的能力,這就要求客戶端數(shù)據(jù)的更改應(yīng)與服務(wù)器端數(shù)據(jù)同步。同樣,服務(wù)器數(shù)據(jù)有可能被多個(gè)客戶端更改,因此,服務(wù)器數(shù)據(jù)的更改也必須同步到其他客戶端。在數(shù)據(jù)同步的過程中,有可能發(fā)生數(shù)據(jù)沖突,因此,必須考慮如何同步數(shù)據(jù)和處理數(shù)據(jù)沖突。
(5)信息的多樣性處理
為了在各種無線終端上提供計(jì)算和協(xié)作能力,要求系統(tǒng)的信息能夠被多態(tài)顯示,為此系統(tǒng)要為計(jì)算數(shù)據(jù)提供多態(tài)性的結(jié)構(gòu)化存儲(chǔ)能力,使系統(tǒng)能夠在特定的終端下提供恰當(dāng)?shù)男畔?nèi)容和顯示視圖。
(6)移動(dòng)終端的人機(jī)界面
移動(dòng)計(jì)算系統(tǒng)需要一個(gè)更友好的人機(jī)界面。大量無線終端的出現(xiàn),使得傳統(tǒng)的人機(jī)界面、交互界面不能滿足移動(dòng)用戶的需要;另外,移動(dòng)便攜設(shè)備本身的性能也受到了很多限制。在這樣的情況下,圖形用戶界面技術(shù)也受到了影響,因此,需要針對(duì)無線設(shè)備采用適合的用戶界面技術(shù),使移動(dòng)設(shè)備人機(jī)界面更加靈活,提供更好的用戶體驗(yàn)。
2 智能客戶端設(shè)計(jì)特征
(1)充分利用本地資源
智能客戶端(smart Client)應(yīng)用程序能充分利用本地資源,例如,用于存儲(chǔ)、處理或數(shù)據(jù)捕獲的硬件(例如,閃存、CPU或者攝像頭),能充分發(fā)揮客戶端的優(yōu)勢(shì),減輕服務(wù)器的負(fù)擔(dān),最大化地利用本地資源,響應(yīng)速度快。
(2)具備離線的數(shù)據(jù)存儲(chǔ)能力
無論是否連接到Intranet/Internet,智能客戶端應(yīng)用程序都可以正常工作。在沒有網(wǎng)絡(luò)連接或網(wǎng)絡(luò)連接時(shí)斷時(shí)續(xù)時(shí),智能客戶端能夠利用本地緩存和處理進(jìn)行操作。在重新連接到服務(wù)器后,智能客戶端將按照應(yīng)用程序邏輯允許的方式智能地更新數(shù)據(jù)。Web服務(wù)使智能客戶端能夠利用行業(yè)標(biāo)準(zhǔn)(例如。XML,HTTP和SOAP)與任何類型的遠(yuǎn)程系統(tǒng)交換信息。
(3)智能安裝和更新
智能客戶端的部署模型允許將解決方案存儲(chǔ)到企業(yè)網(wǎng)絡(luò)或受信任的服務(wù)器上,當(dāng)授權(quán)用戶點(diǎn)擊相應(yīng)的鏈接時(shí)將自動(dòng)下載相關(guān)代碼并安裝。新版本的應(yīng)用程序發(fā)布到服務(wù)器上后,當(dāng)用戶在客戶機(jī)上再次使用該應(yīng)用程序時(shí)會(huì)自動(dòng)下載并更新應(yīng)用程序。這種方式使用戶能像對(duì)于Web應(yīng)用程序一樣簡單方便地進(jìn)行部署和更新,解決了傳統(tǒng)C/S架構(gòu)部署更新困難的問題。
(4)客戶端設(shè)備靈活性
智能客戶端可以部署在PC、便攜式電腦、Tablet PC或其他智能設(shè)備上。能夠感知目標(biāo)設(shè)備的功能和使用環(huán)境,并定制應(yīng)用程序,提供最適合的功能。.NET框架和NET框架壓縮版(.NET Compact Framework)一起提供了一個(gè)用來生成智能客戶端應(yīng)用程序的通用平臺(tái)。
根據(jù)智能客戶端應(yīng)用程序所面向的平臺(tái),可以將這些應(yīng)用程序劃分為三大類:①Windows智能客戶端應(yīng)用程序;②Office智能客戶端應(yīng)用程序;③移動(dòng)智能客戶端應(yīng)用程序。
3 智能客戶端在移動(dòng)計(jì)算環(huán)境中關(guān)鍵技術(shù)的實(shí)現(xiàn)
3.1 網(wǎng)絡(luò)狀態(tài)的檢測
為了動(dòng)態(tài)地監(jiān)測網(wǎng)絡(luò)連接狀況,對(duì)于不同的連接狀況,客戶端可以采取不同的工作方式,在線或離線工作,在具體的設(shè)計(jì)中,可以使用Net Framework 2.0中的NetworkChange類和NetworkInterface類來實(shí)現(xiàn)網(wǎng)絡(luò)連接的監(jiān)測。Network-Change類可以使應(yīng)用程序在網(wǎng)絡(luò)接口(也稱為網(wǎng)卡或網(wǎng)絡(luò)適配器)的Internet協(xié)議(IP)地址更改時(shí)收到通知。NetworkIn-terface類提供網(wǎng)絡(luò)接口的配置和統(tǒng)計(jì)信息。相關(guān)代碼可以查閱文獻(xiàn)[3]。
3.2 客戶端數(shù)據(jù)的緩存
智能客戶端通常使用數(shù)據(jù)集(Dataset)處理數(shù)據(jù),因此,可以將數(shù)據(jù)集序列化到本地文件。數(shù)據(jù)集提供ReadXML和Wri—teXML方法,可以將數(shù)據(jù)集中的數(shù)據(jù)寫入XML文件中。但是,XML文件中的數(shù)據(jù)都是明文,沒有安全性可言,在需要對(duì)本地?cái)?shù)據(jù)進(jìn)行保護(hù)的場合并不適用。另外,XML文件僅僅保存了數(shù)據(jù),而對(duì)于數(shù)據(jù)集的一些狀態(tài)(例如DataRow.RowState)無法保存,因此,當(dāng)客戶端從本地文件載入數(shù)據(jù)到數(shù)據(jù)集中,在與服務(wù)器進(jìn)行數(shù)據(jù)同步時(shí),無法通過DataSet.GetChanges方法獲得客戶端對(duì)數(shù)據(jù)集所做過的修改。
因此,有必要實(shí)現(xiàn)一個(gè)專門的序列化類(serializationHelper)和數(shù)據(jù)保護(hù)類(Data Protection)來實(shí)現(xiàn)客戶端數(shù)據(jù)集的序列化及數(shù)據(jù)的保護(hù)。具體的代碼實(shí)現(xiàn)可以查閱文獻(xiàn)[4]。
3.3 數(shù)據(jù)同步策略
當(dāng)客戶端數(shù)據(jù)或者服務(wù)器數(shù)據(jù)發(fā)生變化時(shí),應(yīng)該及時(shí)進(jìn)行同步,保證客戶端和服務(wù)器數(shù)據(jù)的一致。
智能客戶端對(duì)本地?cái)?shù)據(jù)進(jìn)行更改后,本地?cái)?shù)據(jù)集(Cli-ent-DataSet)調(diào)用GetChanges方法獲得已更改的數(shù)據(jù)(Cli—entChangedDataSet),然后將已更改的數(shù)據(jù)和最后同步時(shí)間(LastSyncDate)通過Web服務(wù)提交給服務(wù)器。服務(wù)器將客戶端傳來的已更改數(shù)據(jù)合并到數(shù)據(jù)庫,同時(shí),服務(wù)器根據(jù)客戶端的最后同步時(shí)間,在服務(wù)器上查找在該時(shí)間之后服務(wù)器已經(jīng)更新了的數(shù)據(jù),并將這些數(shù)據(jù)(Server-ChangedDataSet)傳回客戶端??蛻舳双@得服務(wù)器傳回的更新數(shù)據(jù)后,將這此數(shù)據(jù)合并到客戶端的數(shù)據(jù)集中。同時(shí),更新最后同步時(shí)間。圖l對(duì)客戶端和服務(wù)器的數(shù)據(jù)同步做了簡單的示意。
3.4 數(shù)據(jù)的沖突處理策略
在更改客戶端數(shù)據(jù)并與服務(wù)器進(jìn)行同步時(shí),由于服務(wù)器上保存的數(shù)據(jù)可能發(fā)生改變,會(huì)導(dǎo)致數(shù)據(jù)沖突。因此,需要采用某種機(jī)制來確保數(shù)據(jù)沖突能夠得到適當(dāng)?shù)奶幚?,并且最后得到的?shù)據(jù)是一致和正確的。在NET框架中,可以使用數(shù)據(jù)集(DataSet)和適配器(DataAdapter)來實(shí)現(xiàn)開放式并發(fā)處理。
當(dāng)適配器調(diào)用Update方法更新數(shù)據(jù)時(shí),會(huì)觸發(fā)RowUpdated事件,通過對(duì)事件參數(shù)狀態(tài)(e.Status)的檢查,可以檢測到當(dāng)前是否發(fā)生了數(shù)據(jù)沖突,對(duì)沖突數(shù)據(jù)作相應(yīng)的處理。具體的數(shù)據(jù)沖突處理過程如下所示:
假設(shè)數(shù)據(jù)集中有一張Customer表和Conflict表。
(1)客戶端與服務(wù)器進(jìn)行數(shù)據(jù)同步。當(dāng)服務(wù)器得到從客戶端傳來的數(shù)據(jù)后,調(diào)用Update方法進(jìn)行數(shù)據(jù)更新,如果發(fā)生數(shù)據(jù)沖突,則在觸發(fā)的RowUpdated事件中,可以檢測到事件參數(shù)狀態(tài):e.Status為UpdateStatus.ErrorsOccurred。此時(shí),在事件處理函數(shù)中對(duì)沖突數(shù)據(jù)進(jìn)行處理:首先將發(fā)生沖突的服務(wù)器端的customer數(shù)據(jù)添加到返回給客戶端數(shù)據(jù)集的Customer表中。再將發(fā)生沖突的客戶端customer數(shù)據(jù)添加到返回給客戶端數(shù)據(jù)集的Conflict表中。然后,將e.Status置為UpdateStatus.Continue,繼續(xù)更新數(shù)據(jù),直到所有數(shù)據(jù)更新完畢后。將數(shù)據(jù)集返回給客戶端。
(2)當(dāng)客戶端得到從服務(wù)器返回的數(shù)據(jù)集后,檢查數(shù)據(jù)集中的Conflict表中有無沖突數(shù)據(jù),如果有,表示有數(shù)據(jù)沖突發(fā)生,則從Customer表和Conflict表中分別取出發(fā)生沖突的服務(wù)器端的和客戶端的customer數(shù)據(jù)呈現(xiàn)給用戶,讓用戶進(jìn)行選擇,是保留服務(wù)器端的數(shù)據(jù)還是保留客戶端的數(shù)據(jù)。之后根據(jù)用戶的選擇進(jìn)行數(shù)據(jù)處理。
(3)如果用戶選擇保留服務(wù)器端的數(shù)據(jù),則清除客戶端的沖突數(shù)據(jù),并將服務(wù)器端的數(shù)據(jù)合并到客戶端數(shù)據(jù)集中。如果用戶選擇保留客戶端的數(shù)據(jù),則清除服務(wù)器端的沖突數(shù)據(jù),并將客戶端的沖突數(shù)據(jù)重新合井到客戶端數(shù)據(jù)集中,等待下次的數(shù)據(jù)同步,再將客戶端的數(shù)據(jù)重新同步到服務(wù)器上。
4 安全性問題
安全性問題是部署程序的熱點(diǎn)。智能客戶端更新時(shí)從網(wǎng)絡(luò)上下載裝配件,如果一個(gè)黑客說服或者誘使用戶下載惡意代碼,而該用戶的用戶賬號(hào)具有很高的權(quán)限,那系統(tǒng)就對(duì)危害門戶洞開了。為了提高智能客戶端的安全性,除了傳統(tǒng)的身份驗(yàn)證和授權(quán)等方式之外,在NET平臺(tái)上引入了代碼訪問安全這一機(jī)制。
CAS(code Access Security,代碼訪問安全),是指CLR強(qiáng)制執(zhí)行的為裝配件指定基于屬性的可信度等級(jí),例如數(shù)字證書、源站點(diǎn)、URL等,.NET Framework只允許已知的或受信的.源代碼執(zhí)行??梢允褂肗ET Framework Configuration工具,將程序集的站點(diǎn)添加到可信任站點(diǎn)清單中,并且提高信任站點(diǎn)的安全級(jí)別,或者選擇運(yùn)行庫安全策略提高程序集的信任級(jí)別,或者發(fā)布安全策略級(jí)別部署包,賦予程序集運(yùn)行所需要的最低權(quán)限,杜絕超越權(quán)限的代碼執(zhí)行,從而保護(hù)系統(tǒng)不受到惡意攻擊。這種安全策略也稱為“在最小權(quán)限下運(yùn)行”策略。
5 結(jié)束語
本文針對(duì)移動(dòng)計(jì)算環(huán)境所面臨的特殊情況,提出了智能客戶端技術(shù)在移動(dòng)計(jì)算中實(shí)現(xiàn)的一些關(guān)鍵問題,并給出了相應(yīng)的解決方法。目前,智能客戶端技術(shù)在智能設(shè)備上應(yīng)用的研究在全球范圍內(nèi)仍處于起步階段,諸多智能客戶端思想在智能設(shè)備上的解決方案還沒有達(dá)到業(yè)界共識(shí)。但隨著.NET技術(shù)的進(jìn)一步成熟和Web技術(shù)的更廣泛應(yīng)用,智能客戶端技術(shù)在移動(dòng)計(jì)算等智能設(shè)備應(yīng)用上必將有更廣泛的前景。