天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

ASP.NET底層的初步認識與理解

  最近在國外的網(wǎng)站亂走一通,發(fā)現(xiàn)一些比較好的文章,收集整理加于自己的理解,作為筆記形式記錄下來,讓以后自己有個回憶。

  ASP.NET是一個非常強大的構(gòu)建Web應用的平臺,它提供了極大的靈活性和能力以致于可以用它來構(gòu)建所有類型的Web應用.絕大多數(shù)的人只熟悉高層的框架如WebForms和WebServices-這些都在ASP.NET層次結(jié)構(gòu)在最高層.在這篇文章中我將會討論ASP.NET的底層機制并解釋請求(request)是怎么從Web服務器傳送到ASP.NET運行時然后如何通過ASP.NET管道來處理請求.

  ASP.NET是一個請求處理引擎.它接收一個發(fā)送過來的請求,把它傳給內(nèi)部的管道直到終點,作為一個開發(fā)人員的你可以在這里附加一些代碼來處理請求.這個引擎是和HTTP/Web服務器完全分隔的.事實上,HTTP運行時是一個組件,使你可以擺脫IIS或者任何其他的服務器程序,將你自己的程序寄宿在內(nèi).

  運行時提供了一個復雜但同時非常優(yōu)雅的在管道中路由請求的機制.其中有很多相關(guān)的對象,大多數(shù)都是可擴展的(通過繼承或者事件接口),在幾乎所有的處理流程上都是如此.所以這個框架具有高度可擴展性.通過這個機制,掛接到非常底層的接口(比如緩存,認證和授權(quán))都變得可能了.你甚至可以在預處理或者處理后過濾內(nèi)容,也可以簡單的將符合特殊標記的請求直接路由你的代碼或者另一個URL上.存在著許多不同的方法來完成同一件事,但是所有這些方法都是可以簡單直接地實現(xiàn)的,同時還提供了靈活性,可以得到最好的性能和開發(fā)的簡單性.

  整個ASP.NET引擎是完全建立在托管代碼上的,所有的擴展功能也是通過托管代碼擴展來提供的.這是對.NET框架具有構(gòu)建復雜而且高效的框架的能力的最好的證明.ASP.NET最令人印象深刻的地方是深思熟慮的設計,使得框架非常的容易使用,又能提供掛接到請求處理的幾乎所有部分的能力.

  ASP.NET在微軟的平臺上就是通過ISAPI擴展來和IIS進行交互的,這個擴展寄宿著.NET運行時和ASP.NET運行時.ISAPI提供了核心的接口,ASP.NET使用非托管的ISAPI代碼通過這個接口來從Web服務器獲取請求,并發(fā)送響應回客戶端.ISAPI提供的內(nèi)容可以通過通用對象(例如HttpRequest和HttpResponse)來獲取,這些對象通過一個定義良好并有很好訪問性的接口來暴露非托管數(shù)據(jù).

  當用戶發(fā)送一個URL請求時,在Web服務器端,IIS5或6,獲得這個請求.在最底層,ASP.NET和IIS通過ISAPI擴展進行交互.在ASP.NET環(huán)境中這個請求通常被路由到一個擴展名為.ASPx的頁面上,但是這個流程是怎么工作的完全依賴于處理特定擴展名的HTTP Handler是怎么實現(xiàn)的.在IIS中.ASPx通過’應用程序擴展’(又稱為腳本映射)被映射到ASP.NET的ISAPI擴展DLL-ASPNET_isapi.dll.每一個請求都需要通過一個被注冊到ASPNET_isapi.dll的擴展名來觸發(fā)ASP.NET(來處理這個請求).

  ISAPI是底層的非托管Win32 API.ISAPI定義的接口非常簡單并且是為性能做了優(yōu)化的.它們是非常底層的-處理指針和函數(shù)指針表來進行回調(diào)-但是它們提供了最底層和面向效率的接口,使開發(fā)者和工具提供商可以用它來掛接到IIS上.因為ISAPI非常底層所以它并不適合來開發(fā)應用級的代碼,而且ISAPI傾向于主要被用于橋接接口,向上層工具提供應用服務器類型的功能.

  下面來介紹HttpRuntime,HttpContext,HttpApplication

  當一個請求到來時,它被路由到ISAPIRuntime.ProcessRequest()方法.這個方法調(diào)用HttpRuntime.ProcessRequest方法,它作一些重要的事情

為請求創(chuàng)建一個新的HttpContext實例
獲取一個HttpApplication實例
調(diào)用HttpApplication.Init()方法來設置管道的事件
Init()方法觸發(fā)開始ASP.NET管道處理的HttpApplication.ResumeProcessing()方法

  首先一個新的HttpContext對象被創(chuàng)建并用來傳遞ISAPIWorkerRequest,這個上下文在整個請求的生命周期總都是可用的并總可以通過靜態(tài)屬性。

  HttpContext.Currect來訪問.正像名字所暗示的那樣,HttpContext對象代表了當前活動請求的上下文因為他包含了在請求生命周期中所有典型的你需要訪問的重要對象:Request,Response,Application,Server,Cache.在請求處理的任何時候HttpContext.Current給你訪問所有這些的能力。

  HttpContext對象也包含一個非常有用的Items集合,你可以用它來保存針對特定請求的數(shù)據(jù).上下文對象在請求周期的開始時被創(chuàng)建,在請求結(jié)束時被釋放,所有在Items集合中保存的數(shù)據(jù)只在這個特定的請求中可用.一個很好的使用的例子是請求日志機制,當你通過想通過在Global.asax中掛接Application_BeginRequest和Application_EndRequest方法記錄請求的開始和結(jié)束時間(象在列表3中顯示的那樣).HttpContext對你就非常有用了-如果你在請求或頁面處理的不同部分需要數(shù)據(jù),你自由的使用它.

protected void Application_BeginRequest(Object sender, EventArgs e)
{
if (App.Configuration.LogWebRequests)
{
Context.Items.Add(
"WebLog_StartTime",DateTime.Now);
}
}

protected void Application_EndRequest(Object sender, EventArgs e)
{
if (App.Configuration.LogWebRequests)
{
try
{
TimeSpan Span
= DateTime.Now.Subtract((DateTime) Context.Items["WebLog_StartTime"] );
int MiliSecs = Span.TotalMilliseconds;
WebRequestLog.Log(App.Configuration.ConnectionString,
true, MilliSecs);
}
}
}

NET技術(shù)ASP.NET底層的初步認識與理解,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品JK白丝AV网站 | 小草高清视频免费直播 | 狼人大香伊蕉国产WWW亚洲 | 乱亲女H秽乱长久久久 | 久久免费视频1 | 亚洲精品中文字幕在线 | 国产色婷婷亚洲99麻豆 | 北原夏美 快播 | 亚洲第一成年网站视频 | 日本xxxxxxxxx老师59 | 国产精品无码人妻在线 | 午夜神器18以下不能进免费 | 狠狠色综合久久婷婷 | 人人干人人看 | 欧美性爱 先锋影音 | 亚洲综合色在线视频久 | 国产精品嫩草影院一区二区三区 | 榴莲黄版无限刷 | 帝王被大臣们调教高肉 | 青柠在线观看免费高清电视剧荣耀 | 久爱在线中文在观看 | 精品国产90后在线观看 | 日本漂亮妈妈7观整有限中 日本片bbbxxx | 蜜桃TV成人网站免费打开 | 久久成人精品免费播放 | 无限资源在线观看完整版免费下载 | 久久精品视频在线看99 | 2019伊人查蕉在线观看 | 高h肉辣文黄蓉 | 伊人亚洲综合网色 | 香蕉99久久久久成人麻豆 | 果冻传媒最新视频在线观看 | YY6080A旧里番在线观看 | 日本一卡二卡三卡四卡无卡免费播放 | 韩国女主播内部vip自带氏巾 | 色狠狠色综合吹潮 | 最新亚洲中文字幕在线观看 | 色噜噜噜噜亚洲第一 | 99re6久久热在线视频 | 国产精品美女久久久久浪潮AV | 单亲妈妈3韩国电影免费观看 |