日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

ASP.NET的底層的工作機(jī)制介紹_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:保護(hù)你的DLL和Code不被別人使用
大家做項(xiàng)目開(kāi)發(fā)一般都是分層的,比如UI層,業(yè)務(wù)層,數(shù)據(jù)訪問(wèn)層。業(yè)務(wù)層引用數(shù)據(jù)訪問(wèn)層的DLL(比如dataAccess.dll),并使用dataAccess.dll中的方法。當(dāng)項(xiàng)目完成并給客戶用了,可有些心里BT的客戶

關(guān)于ASP.NET的底層的工作機(jī)制,最近園子里討論的甚是火熱。相信很多人都看過(guò)Rick Strahl先生的一篇經(jīng)典之作:A low-level Look at the ASP.NET Architecture,經(jīng)Rick Strahl同意,我把他的這篇文章翻譯成中文,希望能夠給想深入了解ASP.NET工作機(jī)制的朋友一點(diǎn)幫助。

特別說(shuō)明:翻譯此文的目的僅僅是為了給廣大的ASP.NET愛(ài)好者提供一些幫助,由于本人能力有限,文中不對(duì)地方,還請(qǐng)批評(píng)指正。如果你需要轉(zhuǎn)載,請(qǐng)你保留該文以及原英文的鏈接。多謝!

目錄

1、ASP.NET是什么?

2、從瀏覽器到ASP.NET

3、ISAPI連接

4、IIS5和IIS6的不同之處

5、進(jìn)入.NET運(yùn)行時(shí)

6、加載.NET—稍微有點(diǎn)神秘

7、回到運(yùn)行時(shí)

8、HttpRuntime,HttpContext以及HttpApplication

9、Web程序的主要部分:HttpApplication

10、穿過(guò)ASP.NET管道

11、HttpContext,HttpModules和HttpHandlers

12、HttpModules

13、HttpHandlers

14、是否已經(jīng)提供了足夠的底層知識(shí)?

摘要:ASP.NET是一個(gè)用于構(gòu)建Web程序的強(qiáng)大平臺(tái),提供了巨大的彈性和能力以至于它可以構(gòu)建任意的Web程序。許多人僅僅對(duì)處于ASP.NET高層次的框架如:WebForms和WebServices比較熟悉,因此,在這篇文章里,我將會(huì)闡述有關(guān)ASP.NET比較底層的知識(shí),并且將會(huì)解釋,如何將請(qǐng)求從Web Server移交給ASP.NET運(yùn)行時(shí),然后通過(guò)ASP.NET HTTP管道處理這些請(qǐng)求。

對(duì)于我來(lái)說(shuō),了解一個(gè)平臺(tái)的內(nèi)部工作機(jī)制總是會(huì)讓我感到一些滿足和安慰,如同洞察,可以幫助我寫出更好的程序。知道了工具有什么用途,以及它們?nèi)绾谓M裝成復(fù)雜框架的一部分,這些將會(huì)使你很容易的找到問(wèn)題的解決方案,以及在你修改和調(diào)試錯(cuò)誤時(shí),都顯得非常重要。這篇文章的目的就是從底層了解ASP.NET以及幫助你理解請(qǐng)求如何流入ASP.NET處理管道里。同時(shí),你將會(huì)了解ASP.NET引擎的核心,以及一個(gè)Web請(qǐng)求如何在這里結(jié)束。這里講到的許多知識(shí)都是你日常工作中沒(méi)必要知道的,但是,如果你理解了ASP.NET如何把請(qǐng)求路由到應(yīng)用程序的代碼里(通常比較高層次的),這將對(duì)你非常有用。

注:整個(gè)ASP.NET引擎完全構(gòu)建在托管代碼里,其所有的擴(kuò)展性都是通過(guò)托管代碼去構(gòu)建。

使用ASP.NET的大多數(shù)都比較熟悉WebForms和WebServices。這些高層次的實(shí)現(xiàn),使得構(gòu)建Web程序變得非常容易。ASP.NET被設(shè)計(jì)為驅(qū)動(dòng)引擎,它把底層的接口提供給Web Server,為高層次Web應(yīng)用程序的前端和末端提供了路由服務(wù)。WebForms和WebServices是建立在ASP.NET框架之上,有關(guān)HTTP處理的兩種最常用的方式。

其實(shí),在較低的層次上,ASP.NET也提供了足夠多的靈活性。HTTP運(yùn)行時(shí)和請(qǐng)求管道提供了同樣的能力,可以構(gòu)建類似于WebForms和WebServices的實(shí)現(xiàn),當(dāng)然,這些已經(jīng)使用.NET托管代碼實(shí)現(xiàn)了。如果你需要構(gòu)建一個(gè)自定義HTTP處理平臺(tái),而這個(gè)平臺(tái)要比WebForms所處的層次低一點(diǎn),那么你就會(huì)用到所有這些類似的功能。

構(gòu)建大多的Web界面,使用WebForms無(wú)疑是最容易的方法,但是,如果你想自定義一個(gè)內(nèi)容處理器,或者需要對(duì)流入和流出的內(nèi)容做特殊的處理,或者需要為一個(gè)應(yīng)用程序定制一個(gè)應(yīng)用服務(wù)器接口,那么使用這些低層次的處理或者模塊將會(huì)得到更好的性能,以及可以在真正的請(qǐng)求處理中獲得更多的控制權(quán)。盡管那些高層次的實(shí)現(xiàn),如:WebForms和WebServices已提供了類似的功能,但由于它們針對(duì)請(qǐng)求添加了太多的控制(導(dǎo)致性能下降)。所以你完全可以另辟佳境,在較低層次上處理這些請(qǐng)求。

ASP.NET是什么?

讓我們從最簡(jiǎn)單的定義開(kāi)始,ASP.NET是什么?我通常喜歡用如下語(yǔ)句來(lái)描述ASP.NET。

ASP.NET是完全使用托管代碼處理Web請(qǐng)求的一個(gè)成熟引擎平臺(tái)。它不僅僅只是WebForms和WebServices。

ASP.NET是一個(gè)請(qǐng)求處理引擎。它獲取客戶端請(qǐng)求,然后通過(guò)它內(nèi)置的管道,把請(qǐng)求傳到一個(gè)終點(diǎn),在這個(gè)終點(diǎn),開(kāi)發(fā)者可以添加處理這個(gè)請(qǐng)求的邏輯代碼。實(shí)際上這個(gè)引擎和HTTP或者Web Server是完全分開(kāi)的。事實(shí)上,HTTP運(yùn)行時(shí)是一個(gè)組件,你可以把它宿主在IIS之外的應(yīng)用程序上。甚至完全可以和其它的服務(wù)組合在一起。例如,你可以把HTTP運(yùn)行時(shí)宿主在Windows桌面應(yīng)用程序里(詳細(xì)的內(nèi)容請(qǐng)查看:http://www.west-wind.com/presentations/aspnetruntime/aspnetruntime.aspx)。

通過(guò)使用內(nèi)置的管道路由請(qǐng)求,HTTP運(yùn)行時(shí)提供了一套復(fù)雜的,但卻很優(yōu)雅的機(jī)制。在處理請(qǐng)求的每一個(gè)層面都牽涉到許多對(duì)象,但大多數(shù)對(duì)象都可以通過(guò)派生或者事件接口來(lái)擴(kuò)展。所以,此框架具有非常高的可擴(kuò)展性。通過(guò)這一套機(jī)制,可以進(jìn)入較低層次的接口如:緩存,身份驗(yàn)證,授權(quán)等是有可能的。你可以在處理請(qǐng)求之前或之后過(guò)濾內(nèi)容,或者僅僅把匹配指定簽名的客戶端請(qǐng)求直接路由到你的代碼里或轉(zhuǎn)向其它的URL。針對(duì)同一件事情,可以通過(guò)不同的處理方法完成,而且實(shí)現(xiàn)代碼都非常的直觀。除此之外,在容易開(kāi)發(fā)和性能之間,HTTP運(yùn)行時(shí)還提供了最佳的靈活性。

整個(gè)ASP.NET引擎完全構(gòu)建在托管代碼里,所有的擴(kuò)展性功能都是通過(guò)托管代碼的擴(kuò)展提供。對(duì)于功能強(qiáng)大的.NET框架而言,使用自己的東西,構(gòu)建一個(gè)成熟的、高性能的引擎體系結(jié)構(gòu)已經(jīng)成為一個(gè)遺囑。盡管如此,但重要的是,ASP.NET給人印象最深的是高瞻遠(yuǎn)矚的設(shè)計(jì),這使得在其之上的工作變得非常容易,并且提供了幾乎可以鉤住請(qǐng)求處理當(dāng)中任意部分的能力。

使用ASP.NET可以完成一些任務(wù),之前這些任務(wù)是使用IIS上的ISAPI擴(kuò)展和過(guò)濾來(lái)完成的。盡管還有一些限制,但與ASP相比,已經(jīng)有了很大的進(jìn)步。ISAPI是底層Win32樣式的API,僅它的接口就有1兆,這對(duì)于大型的程序開(kāi)發(fā)是非常困難的。由于ISAPI是底層的接口,因此它的速度也是非常的快。但對(duì)于企業(yè)級(jí)的程序開(kāi)發(fā)是相當(dāng)?shù)碾y于管理的。所以,在一定的時(shí)間內(nèi),ISAPI主要充當(dāng)其它應(yīng)用程序或平臺(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使用非托管代碼獲取請(qǐng)求以及對(duì)客戶端請(qǐng)求發(fā)出響應(yīng)。ISAPI提供的內(nèi)容經(jīng)由公共對(duì)象類似于HttpRequest和HttpResponse,通過(guò)一個(gè)設(shè)計(jì)優(yōu)良的、可訪問(wèn)的接口,以托管對(duì)象的方式暴露非托管數(shù)據(jù)。

從瀏覽器到ASP.NET讓我們從一個(gè)典型的ASP.NET Web請(qǐng)求的生命周期的起點(diǎn)開(kāi)始。用戶通過(guò)在瀏覽器中鍵入一個(gè)URL,點(diǎn)擊一個(gè)超鏈接,提交一個(gè)HTML表單(一個(gè)post請(qǐng)求),或者一個(gè)客戶端程序調(diào)用基于ASP.NET的WebService(通過(guò)ASP.NET提供服務(wù))。在服務(wù)器端,IIS5或者IIS6將會(huì)收到這個(gè)請(qǐng)求。ASP.NET的底層通過(guò)ISAPI擴(kuò)展與IIS通信,然后,通過(guò)ASP.NET,這個(gè)請(qǐng)求通常被路由到一個(gè)帶有.aspx擴(kuò)展名的頁(yè)面。但是,這個(gè)處理過(guò)程如何工作,則完全依賴于HTTP處理器(handler)的執(zhí)行。這個(gè)處理器將被安裝用于處理指定的擴(kuò)展。在IIS中,.aspx經(jīng)由“應(yīng)用程序擴(kuò)展”被映射到ASP.NET ISAPI的dll文件:aspnet_isapi.dll。每一個(gè)觸發(fā)ASP.NET的請(qǐng)求,都必須經(jīng)由一個(gè)已經(jīng)注冊(cè)的,并且指向aspnet_isapi.dll的擴(kuò)展名來(lái)標(biāo)識(shí)。

注:ISAPI是自定義Web請(qǐng)求處理中第一個(gè)并且具有最高性能的IIS入口點(diǎn)。

依靠擴(kuò)展名,ASP.NET把一個(gè)請(qǐng)求路由到一個(gè)恰當(dāng)?shù)奶幚砥�,該處理器則負(fù)責(zé)處理這個(gè)請(qǐng)求。舉個(gè)例子,WebServices的擴(kuò)展名.asmx不會(huì)把一個(gè)請(qǐng)求路由到磁盤上的某一個(gè)頁(yè)面,而是會(huì)路由到在定義中附加了指定特性(WebMethodAttribute)的類,此特性會(huì)把它標(biāo)識(shí)成一個(gè)Web Services的實(shí)現(xiàn)。許多其它的處理器將隨著ASP.NET一起被安裝。當(dāng)然也可以定義你自己的處理器。在IIS里所有的HttpHandler被映射并指向ASP.NET ISAPI擴(kuò)展,并且這些HttpHandler也都在web.config里配置,用于把請(qǐng)求路由到指定的HTTP處理器里執(zhí)行。每一個(gè)處理器都是一個(gè).NET類,用于處理指定的擴(kuò)展。而這些處理器可以處理簡(jiǎn)單到只有幾行代碼的Hello World,也可以處理復(fù)雜到類似ASP.NET的頁(yè)面以及執(zhí)行WebService。就目前而言,僅僅需要理解擴(kuò)展就是一種基本的映射機(jī)制,ASP.NET用它可以從ISAPI里獲取一個(gè)請(qǐng)求,然后把請(qǐng)求路由到指定處理該請(qǐng)求的處理器中。

分享:遠(yuǎn)程抓取GOOGLE的自動(dòng)翻譯結(jié)果
以下為引用的內(nèi)容: 1 Function RemoveHTML()Function RemoveHTML(strhtml) 2 if strhtml<>"" then 3

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程