ASP.NET的底層的工作機(jī)制
西安.NET培訓(xùn)中心 http://www.xapeixun.cn
西安軟件培訓(xùn)|西安IT培訓(xùn)|西安軟件開(kāi)發(fā)培訓(xùn)|西安計(jì)算機(jī)培訓(xùn)|西安電腦培訓(xùn)|西安.NET培訓(xùn)|西安計(jì)算機(jī)培訓(xùn)學(xué)校|西安軟件培訓(xùn)機(jī)構(gòu)|西安軟件培訓(xùn)學(xué)校|西安java培訓(xùn)|西安IT培訓(xùn)機(jī)構(gòu)|西安軟件工程師培訓(xùn)|西安電腦培訓(xùn)|西安編程培訓(xùn)|.NET培訓(xùn)班|.NET培訓(xùn)學(xué)校|.NET培訓(xùn)中心|.NET培訓(xùn)學(xué)校|計(jì)算機(jī)培訓(xùn)班|計(jì)算機(jī)培訓(xùn)學(xué)校|計(jì)算機(jī)培訓(xùn)中心
ASP。NET是什么?
讓咱們從最簡(jiǎn)樸的定義開(kāi)端,ASP。NET是什么?我通常喜愛(ài)用如下語(yǔ)句來(lái)描寫(xiě)ASP。NET。
ASP。NET是完整運(yùn)用托管代碼解決Web要求的一個(gè)成熟引擎平臺(tái)。它不只僅只是WebForms和WebServices。
ASP。NET是一個(gè)要求解決引擎。它獲取客戶(hù)端要求,而后通過(guò)它內(nèi)置的管道,把要求傳到一個(gè)起點(diǎn),在這個(gè)起點(diǎn),開(kāi)發(fā)者能夠增加解決這個(gè)要求的邏輯代碼。實(shí)踐上這個(gè)引擎和HTTP或許Web Server是完整離開(kāi)的。事實(shí)上,HTTP運(yùn)行時(shí)是一個(gè)組件,你能夠把它宿主在IIS之外的運(yùn)用順序上。甚至完整能夠和其它的效勞組合在一起。例如,你能夠把HTTP運(yùn)行時(shí)宿主在Windows桌面運(yùn)用順序里
通過(guò)運(yùn)用內(nèi)置的管途徑由要求,HTTP運(yùn)行時(shí)供給了一套龐雜的,但卻很優(yōu)雅的機(jī)制。在解決要求的每一個(gè)層面都關(guān)涉到許多對(duì)象,但大多數(shù)對(duì)象都能夠通過(guò)派生或許事件接口來(lái)擴(kuò)大。所以,此框架具備十分高的可擴(kuò)大性。通過(guò)這一套機(jī)制,能夠進(jìn)入較低檔次的接口如:緩存,身份驗(yàn)證,受權(quán)等是有能夠的。你能夠在解決要求之前或之后過(guò)濾內(nèi)容,或許僅僅把匹配指定簽名的客戶(hù)端要求間接路由到你的代碼里或轉(zhuǎn)向其它的URL。針對(duì)同一件事件,能夠通過(guò)不同的解決方法實(shí)現(xiàn),而且實(shí)現(xiàn)代碼都十分的直觀。除此之外,在輕易開(kāi)發(fā)和性能之間,HTTP運(yùn)行時(shí)還供給了最佳的靈巧性。
全部ASP。NET引擎完整構(gòu)建在托管代碼里,一切的擴(kuò)大性功用都是通過(guò)托管代碼的擴(kuò)大供給。關(guān)于功用壯大的。NET框架而言,運(yùn)用本人的貨色,構(gòu)建一個(gè)成熟的、高性能的引擎系統(tǒng)構(gòu)造已經(jīng)成為一個(gè)遺言。雖然如此,但重要的是,ASP。NET給人印象最深的是鼠目寸光的設(shè)計(jì),這使得在其之上的義務(wù)變得十分輕易,并且供給了簡(jiǎn)直能夠鉤住要求解決當(dāng)中恣意局部的才能。
運(yùn)用ASP。NET能夠?qū)崿F(xiàn)一些義務(wù),之前這些義務(wù)是運(yùn)用IIS上的ISAPI擴(kuò)大和過(guò)濾來(lái)實(shí)現(xiàn)的。雖然還有一些限制,但與ASP相比,已經(jīng)有了很大的提高。ISAPI是底層Win32款式的API,僅它的接口就有1兆,這關(guān)于大型的順序開(kāi)發(fā)是十分艱難的。因?yàn)镮SAPI是底層的接口,因而它的速度也是十分的快。但關(guān)于企業(yè)級(jí)的順序開(kāi)發(fā)是相稱(chēng)的難于治理的。所以,在肯定的時(shí)光內(nèi),ISAPI重要充任其它運(yùn)用順序或平臺(tái)的橋接口。然而無(wú)論如何,ISAPI沒(méi)有被廢除。事實(shí)上,微軟平臺(tái)上的ASP。NET和IIS的接口是通過(guò)宿主在。NET里的ISAPI擴(kuò)大來(lái)通訊的,而后直達(dá)ASP。NET運(yùn)行時(shí)。ISAPI供給了與Web Server通訊的中心接口,而后ASP。NET運(yùn)用非托管代碼獲取要求以及對(duì)客戶(hù)端要求收回響應(yīng)。ISAPI供給的內(nèi)容經(jīng)由公共對(duì)象相似于HttpRequest和HttpResponse,通過(guò)一個(gè)設(shè)計(jì)優(yōu)異的、可走訪的接口,以托管對(duì)象的方法裸露非托管數(shù)據(jù)。
從閱讀器到ASP。NET讓咱們從一個(gè)典范的ASP。NET Web要求的性命周期的起點(diǎn)開(kāi)端。用戶(hù)通過(guò)在閱讀器中鍵入一個(gè)URL,點(diǎn)擊一個(gè)超鏈接,提交一個(gè)HTML表單(一個(gè)post要求),或許一個(gè)客戶(hù)端順序調(diào)用基于ASP。NET的WebService(通過(guò)ASP。NET供給效勞)。在效勞器端,IIS5或許IIS6將會(huì)收到這個(gè)要求。ASP。NET的底層通過(guò)ISAPI擴(kuò)大與IIS通訊,而后,通過(guò)ASP。NET,這個(gè)要求通常被路由到一個(gè)帶有。aspx擴(kuò)大名的頁(yè)面。然而,這個(gè)解決歷程如何義務(wù),則完整依靠于HTTP解決器(handler)的履行。這個(gè)解決器將被裝置用于解決指定的擴(kuò)大。在IIS中,。aspx經(jīng)由“運(yùn)用順序擴(kuò)大”被映射到ASP。NET ISAPI的dll文件:aspnet_isapi。dll。每一個(gè)觸發(fā)ASP。NET的要求,都必需經(jīng)由一個(gè)已經(jīng)注冊(cè)的,并且指向aspnet_isapi。dll的擴(kuò)大名來(lái)標(biāo)識(shí)。
注:ISAPI是自定義Web要求解決中第一個(gè)并且具備最高性能的IIS入口點(diǎn)。
依靠擴(kuò)大名,ASP。NET把一個(gè)要求路由到一個(gè)適當(dāng)?shù)慕鉀Q器,該解決器則擔(dān)任解決這個(gè)要求。舉個(gè)例子,WebServices的擴(kuò)大名。asmx不會(huì)把一個(gè)要求路由到磁盤(pán)上的某一個(gè)頁(yè)面,而是會(huì)路由到在定義中附加了指定特征(WebMethodAttribute)的類(lèi),此特征會(huì)把它標(biāo)識(shí)成一個(gè)Web Services的實(shí)現(xiàn)。許多其它的解決器將隨著ASP。NET一起被裝置。當(dāng)然也能夠定義你本人的解決器。在IIS里一切的HttpHandler被映射并指向ASP。NET ISAPI擴(kuò)大,并且這些HttpHandler也都在web。config里配置,用于把要求路由到指定的HTTP解決器里履行。每一個(gè)解決器都是一個(gè)。NET類(lèi),用于解決指定的擴(kuò)大。而這些解決器能夠解決簡(jiǎn)樸到只要幾行代碼的Hello World,也能夠解決龐雜到相似ASP。NET的頁(yè)面以及履行WebService。就目前而言,僅僅須要了解擴(kuò)大就是一種基礎(chǔ)的映射機(jī)制,ASP。NET用它能夠從ISAPI里獲取一個(gè)要求,而后把要求路由到指定解決該要求的解決器中。
更多其他招生簡(jiǎn)章,請(qǐng)關(guān)注其他招生簡(jiǎn)章