您好,登錄后才能下訂單哦!
如何淺談ASP.NET應用,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
當一個請求到來時,它被路由到ISAPIRuntime.ProcessRequest() 方法.這個方法調用HttpRuntime.ProcessRequest方法,它作一些重要的事情(用Reflector查看 System.Web.HttpRuntime.ProcessRequestInternal方法):
◆為請求創建一個新的HttpContext實例
◆獲取一個HttpApplication實例
◆調用HttpApplication.Init()方法來設置管道的事件
◆Init()方法觸發開始ASP.NET管道處理的HttpApplication.ResumeProcessing()方法。
介紹ASP.NET應用,首先一個新的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對你就非常有用了-如果你在請求或頁面處理的不同部分需要數據,你自由的使用它.
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 { TimeSpan Span = DateTime.Now.Subtract( (DateTime) Context.Items["WebLog_StartTime"] ); int MiliSecs = Span.TotalMilliseconds; // do your logging WebRequestLog.Log(App.Configuration.ConnectionString,true,MilliSecs); } } }
一旦上下文被設置好,ASP.NET需要通過HttpApplication對象將收到的請求路由到適合的應用程序/虛擬目錄.每個ASP.NET應用程序必須被設置到一個虛擬目錄(或者Web根目錄)而且每個”應用程序”是被單獨的處理的。
HttpApplication類似儀式的主人-它是處理動作開始的地方。
域的主人:HttpApplication
每個請求都被路由到一個HttpApplication對象上.HttpApplicationFactory類根據應用程序的負載為你的 ASP.NET應用創建一個HttpApplication對象池并為每個請求分發HttpApplication對象的引用.對象池的大小受 machine.config文件中ProcessModel鍵中的MaxWorkerThreads設置限制,默認是20個(譯注:此處可能有誤,根據 Reflector反編譯的代碼,池的大小應該是100個,如果池大小小于100,HttpApplicationFactory會創建滿100個,但是考慮到會有多個線程同時創建HttpApplication的情況,實際情況下有可能會超過100個)。
看完上述內容,你們掌握如何淺談ASP.NET應用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。