XML、Web服務(wù)與.NET框架(2)
發(fā)表時(shí)間:2024-06-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]纜線(xiàn)級(jí)的XML:SOAP 實(shí)現(xiàn)Web服務(wù)的異類(lèi)基本結(jié)構(gòu)以及在整個(gè)Web中實(shí)現(xiàn)Web服務(wù)的關(guān)鍵,是實(shí)現(xiàn)支持簡(jiǎn)單數(shù)據(jù)描述格式的技術(shù)。這種格式就是XML。Web服務(wù)必須使用XML來(lái)完成三件事情:基本的纜線(xiàn)格式、服務(wù)描述以及“服務(wù)發(fā)現(xiàn)”。 SOAP:在通信的最低級(jí)別,系統(tǒng)需要使用同一語(yǔ)言。特別,作為通...
纜線(xiàn)級(jí)的XML:SOAP
實(shí)現(xiàn)Web服務(wù)的異類(lèi)基本結(jié)構(gòu)以及在整個(gè)Web中實(shí)現(xiàn)Web服務(wù)的關(guān)鍵,是實(shí)現(xiàn)支持簡(jiǎn)單數(shù)據(jù)描述格式的技術(shù)。這種格式就是XML。Web服務(wù)必須使用XML來(lái)完成三件事情:基本的纜線(xiàn)格式、服務(wù)描述以及“服務(wù)發(fā)現(xiàn)”。
SOAP:在通信的最低級(jí)別,系統(tǒng)需要使用同一語(yǔ)言。特別,作為通信雙方的應(yīng)用程序需要遵守同一套通信規(guī)則:如何表示不同的數(shù)據(jù)類(lèi)型(例如:是整數(shù)還是數(shù)組),以及如何表示命令(即:需要對(duì)數(shù)據(jù)進(jìn)行何種操作)。另外,在必要的時(shí)候應(yīng)用程序還需對(duì)該語(yǔ)言適當(dāng)?shù)臄U(kuò)展。簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議(SOAP)是XML的實(shí)施工具,它提供了一套公共規(guī)則集,該規(guī)則集說(shuō)明了如何表示并擴(kuò)展數(shù)據(jù)和命令。
Web服務(wù)描述語(yǔ)言(WSDL)。雙方應(yīng)用程序在得到了如何表示數(shù)據(jù)類(lèi)型和命令的規(guī)則后,需要對(duì)所接收的特定數(shù)據(jù)和命令進(jìn)行有效的描述。僅僅說(shuō)已接收到整數(shù)是不夠的;比如,在接收到兩個(gè)整數(shù)后,應(yīng)用程序必須明確表述它可以對(duì)這兩個(gè)整數(shù)執(zhí)行乘法運(yùn)算操作。Web服務(wù)描述語(yǔ)言(WSDL)是一種XML語(yǔ)法,開(kāi)發(fā)人員和開(kāi)發(fā)工具可使用它來(lái)表述Web服務(wù)的具體功能。
“SOAP發(fā)現(xiàn)”:在最高層,還需制定一套如何定位服務(wù)描述的規(guī)則:默認(rèn)情況下,用戶(hù)或工具能在什么地方找到服務(wù)的功能描述?依據(jù)“SOAP發(fā)現(xiàn)”規(guī)格說(shuō)明中提供的規(guī)則集,用戶(hù)或開(kāi)發(fā)工具可以自動(dòng)找到服務(wù)的SCL描述。
一旦實(shí)現(xiàn)了這三種功能層,開(kāi)發(fā)人員便可容易地找到Web服務(wù),將它例示成一個(gè)對(duì)象后再集成進(jìn)應(yīng)用程序中,繼而構(gòu)建出一個(gè)具有豐富功能的基本結(jié)構(gòu)。這樣,得到的應(yīng)用程序便能與Web服務(wù)進(jìn)行反向通信了。
.NET框架:Web服務(wù)引擎
很顯然,許多基本結(jié)構(gòu)都需實(shí)現(xiàn)上述進(jìn)程對(duì)開(kāi)發(fā)人員和用戶(hù)的透明化。.NET框架提供此基本結(jié)構(gòu)。從.NET框架角度看,所有組件都可以是Web服務(wù),而Web服務(wù)也僅是一種組件。實(shí)際上,.NET框架提取出微軟組件對(duì)象模型(COM)的精華,將它們與松散耦合計(jì)算的精華有機(jī)地結(jié)合在一起,生成了強(qiáng)大、高效的Web組件系統(tǒng):簡(jiǎn)化程序員的“管道”操作、深入地集成了安全性,引進(jìn)了基于互聯(lián)網(wǎng)的操作系統(tǒng),極大地改善應(yīng)用程序的可靠性和可擴(kuò)展性。
.NET框架包含三個(gè)主要部分:公共語(yǔ)言運(yùn)行時(shí)、具有多層次結(jié)構(gòu)的統(tǒng)一的類(lèi)庫(kù)集合和高級(jí)版“活動(dòng)服務(wù)器頁(yè)面”(又名ASP+)
公共語(yǔ)言運(yùn)行時(shí)
此名稱(chēng)不能準(zhǔn)確反映它的全部功能。實(shí)際上,公共語(yǔ)言運(yùn)行時(shí)在組件的開(kāi)發(fā)過(guò)程中以及軟件的運(yùn)行過(guò)程中,都扮演著非常重要的角色。在組件運(yùn)行過(guò)程中,運(yùn)行時(shí)負(fù)責(zé)管理內(nèi)存分配、啟動(dòng)或取消線(xiàn)程和進(jìn)程、實(shí)施安全性策略、同時(shí)滿(mǎn)足當(dāng)前組件對(duì)其它組件的需求。在開(kāi)發(fā)階段,運(yùn)行時(shí)的作用有些變化:與現(xiàn)今的COM相比,運(yùn)行時(shí)的自動(dòng)化程度大為提高(比如可自動(dòng)執(zhí)行內(nèi)存管理),因而開(kāi)發(fā)人員的工作變得非常輕松。尤其是,映射功能將使代碼編寫(xiě)量銳減,這些代碼是開(kāi)發(fā)人員在將業(yè)務(wù)邏輯轉(zhuǎn)化成可復(fù)用的組件進(jìn)行編程時(shí)所需的。
對(duì)編程語(yǔ)言而言,運(yùn)行時(shí)這個(gè)概念并不新奇:實(shí)際上每種編程語(yǔ)言都有自己的運(yùn)行時(shí)。Visual Basic?開(kāi)發(fā)系統(tǒng)具有最為明顯的運(yùn)行時(shí)(名為VBRUN),Visual C++?跟Visual FoxPro?、Jscript?、SmallTalk、Perl、Python和Java一樣,有一個(gè)運(yùn)行時(shí)MSVCRT。NET框架的關(guān)鍵作用是它提供了一個(gè)跨編程語(yǔ)言的統(tǒng)一的編程環(huán)境,這也是它能獨(dú)樹(shù)一幟的根本原因所在。
統(tǒng)一的編程類(lèi)
.NET框架中的類(lèi)為開(kāi)發(fā)人員提供了一個(gè)統(tǒng)一的、面向?qū)ο蟮摹哟位、可擴(kuò)展的類(lèi)庫(kù)集(API),F(xiàn)今,C++開(kāi)發(fā)人員使用的是微軟基礎(chǔ)類(lèi)庫(kù),Java開(kāi)發(fā)人員使用的是Windows?基礎(chǔ)類(lèi)庫(kù),而Visual Basic用戶(hù)使用的又是Visual Basic API集。簡(jiǎn)而言之,.NET框架統(tǒng)一了微軟當(dāng)前各種不同的框架。這樣,開(kāi)發(fā)人員不再需要學(xué)習(xí)多種框架就能順利編程。遠(yuǎn)不止于此的是,通過(guò)創(chuàng)建一個(gè)公共的跨編程語(yǔ)言的API集,.NET框架可實(shí)現(xiàn)跨語(yǔ)言繼承性、錯(cuò)誤處理功能和調(diào)試功能。實(shí)際上,從Jscript到C++的所有編程語(yǔ)言,都是相互等同的,開(kāi)發(fā)人員可以自由選擇理想的編程語(yǔ)言。
高級(jí)版“活動(dòng)服務(wù)器頁(yè)面”(ASP+)
ASP+是使用 .NET框架提供的類(lèi)庫(kù)構(gòu)建而成的,它提供了一個(gè)Web應(yīng)用程序模型,該模型由一組控件和一個(gè)基本結(jié)構(gòu)組成。有了它,Web應(yīng)用程序的構(gòu)建變得非常容易。開(kāi)發(fā)人員可以直接使用ASP+控件集,該控件集封裝了公共的、用于超文本標(biāo)識(shí)語(yǔ)言(HTML)用戶(hù)界面的各種小組件(諸如文本框、下拉菜單等等)。實(shí)際上,這些控件運(yùn)行在Web服務(wù)器上,它們將用戶(hù)界面轉(zhuǎn)換成HTML格式后再發(fā)送給瀏覽器。在服務(wù)器上,控件負(fù)責(zé)將面向?qū)ο蟮木幊棠P统尸F(xiàn)給Web開(kāi)發(fā)人員,這種編程模型能提供面向?qū)ο蟮木幊碳夹g(shù)擁有的豐富功能。ASP+還提供一些基本結(jié)構(gòu)服務(wù)(諸如會(huì)話(huà)狀態(tài)管理和進(jìn)程循環(huán)),這些服務(wù)進(jìn)一步減少了開(kāi)發(fā)人員要編寫(xiě)的代碼量,并使應(yīng)用程序的可靠性得到了大幅度提高。ASP+還允許開(kāi)發(fā)人員將軟件作為一項(xiàng)服務(wù)進(jìn)行傳送。通過(guò)使用ASP+ Web服務(wù)功能,ASP+開(kāi)發(fā)人員只需進(jìn)行簡(jiǎn)單的業(yè)務(wù)邏輯編程,而由ASP+基本結(jié)構(gòu)負(fù)責(zé)通過(guò)SOAP傳送服務(wù)。
盡管ASP+還未正式發(fā)行,但它已在改進(jìn)應(yīng)用程序功能方面創(chuàng)造出令人難以置信的奇跡:在現(xiàn)有基于ASP的應(yīng)用程序性能基礎(chǔ)上,性能優(yōu)化了三倍之多,更為激動(dòng)人心的是生產(chǎn)效率再度攀升。
.NET框架的核心要素
.NET框架有幾個(gè)要素值得一提。首先是它的安全系統(tǒng)和配置系統(tǒng)。這兩個(gè)系統(tǒng)協(xié)同工作,有力地遏止了運(yùn)行不安全代碼的可能性,并大幅度減少了號(hào)稱(chēng)“DLL Hell”的對(duì)應(yīng)用程序進(jìn)行配置時(shí)所面臨的挑戰(zhàn)。
安全系統(tǒng)是一個(gè)高度細(xì)化、基于事實(shí)的系統(tǒng),它賦予開(kāi)發(fā)人員和管理員多種代碼處理權(quán)限(而不僅僅是“on”或“off”)。將來(lái),還會(huì)根據(jù)代碼本身的核心要素來(lái)決定如何實(shí)施上述權(quán)限。
例如,當(dāng).NET框架應(yīng)用程序被下載到某一系統(tǒng)中時(shí),它會(huì)申請(qǐng)一組權(quán)限(諸如對(duì)臨時(shí)目錄的寫(xiě)入權(quán)限)。運(yùn)行時(shí)將收集有關(guān)應(yīng)用程序的事實(shí)信息(諸如:它是從何處下載的、是否用了有效簽名、甚至它訪(fǎng)問(wèn)系統(tǒng)的準(zhǔn)確程度),并按管理策略決定是否允許應(yīng)用程序運(yùn)行。運(yùn)行時(shí)甚至還可告之應(yīng)用程序它無(wú)法授權(quán)申請(qǐng)的所有權(quán)限,并允許應(yīng)用程序自行決定是否繼續(xù)運(yùn)行。
有這種安全系統(tǒng)作保障,許多應(yīng)用程序配置問(wèn)題便會(huì)迎刃而解。開(kāi)發(fā)人員和管理員(最終是用戶(hù))所面臨的最大挑戰(zhàn)之一是版本的管理問(wèn)題。如果在您新裝了某個(gè)應(yīng)用程序之后,一切都限于癱瘓狀態(tài),而在這之前系統(tǒng)一直運(yùn)行得非常良好,那么最大的可能是新安裝的應(yīng)用程序重寫(xiě)了一些共享庫(kù),并極有可能修正了現(xiàn)有應(yīng)用程序正使用的程序錯(cuò)誤。這種情況出現(xiàn)的頻率很高,以致人們將它稱(chēng)為:“DLL Hell”。
.NET框架擁有的幾項(xiàng)高級(jí)功能可以徹底消除“DLL Hell”現(xiàn)象。首先,它有一個(gè)非常強(qiáng)大的內(nèi)部命名系統(tǒng),能夠有效地防止兩個(gè)庫(kù)因互相重名而被錯(cuò)當(dāng)為對(duì)方的情況發(fā)生。除此之外,它還提供一項(xiàng)被稱(chēng)作“并行”配置的新功能。如果前例中新安裝的應(yīng)用程序確實(shí)重寫(xiě)了共享庫(kù),現(xiàn)有應(yīng)用程序可對(duì)該庫(kù)進(jìn)行修復(fù)。等現(xiàn)有應(yīng)用程序再次啟動(dòng)時(shí),它會(huì)檢查所有的共享文件。如果發(fā)現(xiàn)文件被更改,同時(shí)這些更改又是不兼容的,則它可以請(qǐng)求運(yùn)行時(shí)提取一個(gè)它可以使用的版本。得益于強(qiáng)大的安全系統(tǒng),運(yùn)行時(shí)可以安全地執(zhí)行該操作,這樣應(yīng)用程序就完成了本身的修復(fù)工作。
結(jié)論
人們總是喜歡不厭其煩地發(fā)表諸如“互聯(lián)網(wǎng)改變了一切”的陳詞濫調(diào)。同樣地,在談?wù)摶ヂ?lián)網(wǎng)給人類(lèi)帶來(lái)的影響時(shí),總是情不自禁地使用廣告式的夸張語(yǔ),以表達(dá)對(duì)互聯(lián)網(wǎng)的推崇。不過(guò),互聯(lián)網(wǎng)的確徹底改變了應(yīng)用程序的開(kāi)發(fā)模式和配置方式。將傳輸軟件演變成一種服務(wù)還有待人們的共同努力,XML是實(shí)現(xiàn)這個(gè)夢(mèng)想的重要手段。.NET框架是微軟開(kāi)發(fā)人員戰(zhàn)略的核心內(nèi)容,它旨在幫助開(kāi)發(fā)人員輕松地構(gòu)建、配置和運(yùn)行Web服務(wù)。