国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于面向服務(wù)構(gòu)架的在線學(xué)習(xí)系統(tǒng)模塊整合

2009-07-02 05:29葉海松
現(xiàn)代教育技術(shù) 2009年8期

葉海松

【摘要】文章分析了軟件整合的需求和面向服務(wù)構(gòu)架的特點(diǎn),論述了如何使用基于面向服務(wù)構(gòu)架的方法對軟件進(jìn)行模塊級別的整合,以達(dá)到模塊重用和降低開發(fā)成本的目標(biāo);并通過在Moodle的資源頁面中嵌入簡單的代碼調(diào)用另一平臺的評分模塊服務(wù),提供了面向服務(wù)構(gòu)架的整合實(shí)例。

【關(guān)鍵詞】軟件整合;面向服務(wù)構(gòu)架;學(xué)習(xí)管理系統(tǒng);Web服務(wù)

【中圖分類號】G40-057 【文獻(xiàn)標(biāo)識碼】A 【論文編號】1009—8097(2009)08—0102—03

一 整合問題的產(chǎn)生

現(xiàn)代社會對軟件的需求不斷提高,單個(gè)的復(fù)雜系統(tǒng)所消耗的人力和物力資源急劇上升。為了對付持續(xù)改變的需求,軟件變得越來越復(fù)雜,而軟件使用者和開發(fā)者的持續(xù)投入,使得軟件的成本越來越高。在這樣的背景下,軟件整合,即用多個(gè)小系統(tǒng)的整合來代替一個(gè)超級復(fù)雜的單一系統(tǒng)的方法逐漸受到人們的重視[1]。

在上海師范大學(xué)教育技術(shù)系實(shí)施的“現(xiàn)代教育技術(shù)網(wǎng)絡(luò)課程平臺”項(xiàng)目中就遇到了這種情況。在有限的經(jīng)費(fèi)投入下,項(xiàng)目使用開源的學(xué)習(xí)管理系統(tǒng)Moodle在構(gòu)建了一個(gè)在線學(xué)習(xí)平臺,Moodle能夠滿足我們大部分的需求,包括課程管理、用戶管理、資源管理、在線測試和使用報(bào)告等。但在用戶需求中有一條在Moodle的核心組件沒有提供,即對課程資源的投票評價(jià)功能(如圖1),項(xiàng)目要求能夠讓用戶對資源進(jìn)行無記名的評分,然后提交結(jié)果,同時(shí)會看到總體的評分情況。

這個(gè)功能在另一套成熟資源庫平臺中,已有現(xiàn)成的功能模塊。但是這個(gè)資源庫并不是用PHP來實(shí)現(xiàn)的,而是使用ASP.NET實(shí)現(xiàn)的。如果按照Moodle的模塊設(shè)計(jì)接口,沒有辦法直接將已有的ASP.NET的模塊嵌入Moodle[2]。因此需要尋找一種能夠重復(fù)使用既有代碼又能在兩個(gè)系統(tǒng)中保持松耦合關(guān)聯(lián)的方法,讓 Moodle能夠完全調(diào)用原有的ASP.NET的模塊,只增加少量的PHP代碼來實(shí)現(xiàn)整合工作。并且新增加的功能不影響原系統(tǒng)的穩(wěn)定性,即便新功能失效也不影響系統(tǒng)的運(yùn)行。在研究各種整合方法后,我們選擇了面向服務(wù)的整合框架。

二 面向服務(wù)的整合思路

1 面向服務(wù)的特點(diǎn)

整合的基礎(chǔ)是建立系統(tǒng)之間的對話機(jī)制,面向服務(wù)的構(gòu)架提供了一種基于消息的對話機(jī)制。基于消息的模式通過傳遞數(shù)據(jù)塊來實(shí)現(xiàn)關(guān)聯(lián),這些數(shù)據(jù)塊與原系統(tǒng)的運(yùn)行邏輯無關(guān),這樣的數(shù)據(jù)塊統(tǒng)稱稱作“消息”[3],如圖2。

圖2中網(wǎng)絡(luò)右側(cè)是服務(wù)提供者,它通過接口的形式暴露在網(wǎng)絡(luò)上,并使用標(biāo)準(zhǔn)的服務(wù)描述語言進(jìn)行描述(如WSDL)。網(wǎng)絡(luò)左側(cè)的使用者通過接口和描述服務(wù)的本地代理來訪問服務(wù)。在調(diào)用過程中,網(wǎng)絡(luò)上傳遞的就是消息。消息的格式可以是任意的,由設(shè)計(jì)和開發(fā)者創(chuàng)建。在這里采用的是標(biāo)準(zhǔn)的SOAP協(xié)議提供的XML格式的消息。在接口的背后,服務(wù)的具體實(shí)現(xiàn)和調(diào)用的具體技術(shù)與接口定義是無關(guān)的,只要接口返回的是協(xié)商好的消息格式即可[4]。為了最大限度的利用現(xiàn)有的應(yīng)用程序功能組件,這里將原來的應(yīng)用組件以WebService的標(biāo)準(zhǔn)方式進(jìn)行接口封裝,并發(fā)布在服務(wù)器上。

2 整合實(shí)例結(jié)構(gòu)

這里所碰到的整合問題是一個(gè)典型的異構(gòu)技術(shù)平臺的整合問題。Moodle使用的是PHP,而另一個(gè)評分模塊是運(yùn)行在ASP.NET上的,PHP不能直接調(diào)用ASP.NET平臺的組件。使用標(biāo)準(zhǔn)的Web Service則可以解決這個(gè)調(diào)用問題。圖3的結(jié)構(gòu)解釋了這個(gè)整合的框架。

圖3中,我們將原來系統(tǒng)中的Rating模塊利用ASP.NET重新進(jìn)行Web Service的封裝,使用標(biāo)準(zhǔn)的接口暴露Rating模塊中的投票評價(jià)方法。RatingDAL為原系統(tǒng)中負(fù)責(zé)評分功能的數(shù)據(jù)層組件。這里僅通過增加服務(wù)層組件RatingService對其進(jìn)行方法的調(diào)用,不改變它原有的接口。因?yàn)闆]有對原來的Rating模塊作修改,因此不會引起原系統(tǒng)的運(yùn)行問題。而Moodle中的資源頁面作為服務(wù)的消費(fèi)者,可通過標(biāo)準(zhǔn)的SOAP訪問RatingService[5]。圖3中的RatingService將作為一個(gè)獨(dú)立的服務(wù)存在,可以被除Moodle以外的其它程序調(diào)用。原來使用RatingDAL組件的模塊也可以通過RatingService進(jìn)行調(diào)用。在這個(gè)構(gòu)架中,兩個(gè)平臺所使用的技術(shù)不再是主要的矛盾了。

三 技術(shù)實(shí)現(xiàn)

1 Web服務(wù)的封裝和發(fā)布

在服務(wù)實(shí)現(xiàn)上,考慮到PHP的交互,我們選擇了使用ASP.NET實(shí)現(xiàn)基于SOAP標(biāo)準(zhǔn)的Web服務(wù)[6][7]。我們通過RatingService,聲明了必須的接口,然后通過對RatingDAL的調(diào)用完成封裝。下面是RatingService的封裝代碼,可以看到代碼中完全是對原RatingDAL的封裝,沒有任何具體的數(shù)據(jù)庫訪問代碼。完成后在IIS上發(fā)布,測試通過。

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class RatingService : System.Web.Services.WebService

{

[WebMethod]

//對原模塊的調(diào)用,提交用戶的評分public int Rating(string applicationid, int resourceid, int score){

RatingDAL dal = RatingDAL.GetInstance();

return dal.AddRatingRecord(applicationid,resourceid,score);}

[WebMethod]

//對原模塊的調(diào)用,得到具體資源的平均分

private int GetAverageScore(string applicationid, int resourceid)

{

RatingDAL dal = RatingDAL.GetInstance();

return dal.GetStatistic(applicationid,resourceid);

}

[WebMethod]

//對原模塊的調(diào)用,得到具體資源評分人數(shù)

private int GetTotalUsers(string applicationid, int resourceid)

{

RatingDAL dal = RatingDAL.GetInstance();

return dal.GetStatistic(applicationid,resourceid);

}

//其它的WebMethods

//……

}

在這個(gè)版本的RatingService中,每個(gè)需要進(jìn)行投票統(tǒng)計(jì)的應(yīng)用程序必須先手動的生成一個(gè)GUID作為ApplicationID。以后每次記錄投票和統(tǒng)計(jì)時(shí)都必須提供相應(yīng)的ApplicationID。

2 Moodle的Web服務(wù)調(diào)用

在Moodle調(diào)用方法上,可選擇PHP調(diào)用Web服務(wù),或者使用JavaScript進(jìn)行Ajax調(diào)用。考慮到跨域訪問的安全性問題,我們選擇了使用PHP的PEAR_SOAP模塊。

在Moodle中我們找到顯示資源的頁面,moodlemod esourceview.php文件。我們在該文件中使用HTML設(shè)計(jì)如圖1的界面,然后增加Web服務(wù)的調(diào)用代碼。

首先,利用soapclient對象訪問RatingService,獲得其接口方法,并創(chuàng)建服務(wù)代理,代碼如下:

表2 WebService聲明

include(“SOAP/Client.php”);

//設(shè)置ApplicationID,這個(gè)ID是手工注冊生成的

$applicationid=”3c4b5694-339c-4fe6-8248-4409f2eb1050$wsdl=new”;

//獲取自動生成的WSDL代碼

$wsdl=SOAP_WSDL(“http://localhost/Rating/RatingService.asmx?WSDL”);

//根據(jù)$wsdl生成RatingService的代理$soapclient

$soapclient=$wsdl->getProxy();

然后,進(jìn)行投票記錄,通過$soapclient調(diào)用Rating方法,記錄投票的分值:

最后,獲取評分情況,存儲在變量中,供下文應(yīng)用:

表4 WebService的數(shù)據(jù)讀取方法調(diào)用

//調(diào)用RatingService的方法,分別得到平均分和評分用戶數(shù)

$average=$soapclient->GetAverageScore($applicationid, $id);

$totalusers=$soapclient->GetTotalUsers($applicationid, $id);

……

//在相應(yīng)位置顯示平均得分和參與用戶數(shù)

分(最高分9分)

已有 位用戶對此資源進(jìn)行評分

最終結(jié)果如圖4所示。

上面的實(shí)例中Moodle本身并不是面向服務(wù)構(gòu)架,但是PHP有支持Web Service調(diào)用的模塊,為實(shí)施整合提供了條件。實(shí)例中,我們沒有對原評價(jià)模塊作過多的調(diào)整,只是將它通過Web Service進(jìn)行封裝發(fā)布,實(shí)現(xiàn)了服務(wù)和具體調(diào)用的分離,不僅為Moodle提供了服務(wù)同時(shí)也可以向其它應(yīng)用程序提供評分的服務(wù)。上述實(shí)例在本地機(jī)Moodle1.9/PHP/Apache/MySql/Windows和ASP.NET2.0/IIS5/MSSQL/Windows環(huán)境下調(diào)試通過。

3 進(jìn)一步的研究目標(biāo)

文中的兩個(gè)系統(tǒng)是在同一個(gè)服務(wù)器上運(yùn)行的,因此并沒有涉及到有關(guān)安全性的問題。在后續(xù)的應(yīng)用中,可能會遇到分布式的調(diào)用,因此對WebService安全性的控制將是下一步的研究目標(biāo)。

四 小結(jié)

綜上所述,軟件整合的目的是充分重用現(xiàn)有的軟件,減少軟件維護(hù)和開發(fā)的成本。要達(dá)到這個(gè)目的,整合的方法是很重要的,不然很有可能會和預(yù)期的目標(biāo)被道而馳。本文研究的面向服務(wù)的軟件整合方法,在使用不同技術(shù)實(shí)現(xiàn)的軟件中,通過基于消息的通訊來實(shí)施整合,大大減少了軟件之間的依賴性,提高了整合的可靠性。當(dāng)然,任何方法都不是萬能的,具體的整合過程還牽涉到原有系統(tǒng)的開發(fā)框架、目標(biāo)軟件本身的可靠性和可擴(kuò)展性都等因素,在實(shí)施軟件整合時(shí)要結(jié)合各種實(shí)際情況進(jìn)行綜合的研究。

榆林市| 鸡泽县| 南川市| 平利县| 梁河县| 商河县| 布拖县| 高尔夫| 厦门市| 若尔盖县| 遵化市| 义乌市| 罗江县| 周至县| 惠水县| 类乌齐县| 喀喇| 定安县| 鄂州市| 绥芬河市| 吉安市| 大兴区| 景泰县| 鄯善县| 雷山县| 德州市| 右玉县| 浪卡子县| 台山市| 葫芦岛市| 林周县| 和林格尔县| 周至县| 喀喇沁旗| 博爱县| 岚皋县| 盱眙县| 潜山县| 隆尧县| 大化| 台江县|