軟件測試開發技術ASP.NET底層架構的處理請求[1] .NET構架
關鍵字:ASP.NET 底層架構
當一個請求到來時,它被路由到ISAPIRuntime.ProcessRequest()方法.這個方法調用HttpRuntime.ProcessRequest方法,它作一些重要的事情(用Reflector查看System.Web.HttpRuntime.ProcessRequestInternal方法):
·為請求創建一個新的HttpContext實例
·獲取一個HttpApplication實例
·調用HttpApplication.Init()方法來設置管道的事件
·Init()方法觸發開始ASP.NET管道處理的HttpApplication.ResumeProcessing()方法。
首先一個新的HttpContext對象被創建并用來傳遞ISAPIWorkerRequest(ISAPI ECB的包裝器).這個上下文在整個請求的生命周期總都是可用的并總可以通過靜態屬性HttpContext.Currect來訪問.正像名字所暗示的那樣,HttpContext對象代表了當前活動請求的上下文因為他包含了在請求生命周期中所有典型的你需要訪問的重要對象:Request,Response,Application,Server,Cache.在請求處理的任何時候HttpContext.Current給你訪問所有這些的能力.
HttpContext對象也包含一個非常有用的Items集合,你可以用它來保存針對特定請求的數據.上下文對象在請求周期的開始時被創建,在請求結束時被釋放,所有在Items集合中保存的數據只在這個特定的請求中可用.一個很好的使用的例子是請求日志機制,當你通過想通過在Global.asax中掛接Application_BeginRequest和Application_EndRequest方法記錄請求的開始和結束時間(象在列表3中顯示的那樣).HttpContext對你就非常有用了-如果你在請求或頁面處理的不同部分需要數據,你自由的使用它.
列表3-使用HttpContext.Items集合使你在不同的管道事件中保存數據
protected void Application_BeginRequest(Object sender, EventArgs e)
{
//*** Request Logging
if (App.Configuration.LogWebRequests)
Context.Items.Add("WebLog_StartTime",DateTime.Now);
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
// *** Request Logging
if (App.Configuration.LogWebRequests)
{
try
{
文章來源于領測軟件測試網 http://www.kjueaiud.com/