1. 程式人生 > 實用技巧 >HttpRuntime的認識與加深理解

HttpRuntime的認識與加深理解

HttpRuntime的認識與加深理解

下面最先介紹HttpRuntime的Web.config裡的配置

<httpRuntime
   executionTimeout = "number" 
   maxRequestLength = "number" 
   requestLengthDiskThreshold = "number" 
   useFullyQualifiedRedirectUrl = "[True|False]" 
   minFreeThreads = "number" 
   minLocalRequestFreeThreads = "number" 
   appRequestQueueLimit 
= "number" enableKernelOutputCache = "[True|False]" enableVersionHeader = "[True|False]" apartmentThreading = "[True|False]" requireRootedSaveAsPath = "[True|False]" enable = "[True|False]" sendCacheControlHeader = "[True|False]" shutdownTimeout = "number" delayNotificationTimeout
= "number" waitChangeNotification = "number" maxWaitChangeNotification = "number" enableHeaderChecking = "[True|False]" />

通過上面的配置說明, 下面是在Web.Config裡節點的設定

<configuration>
  <system.web>
  <httpRuntime maxRequestLength="4000"
    enable = "True"
    requestLengthDiskThreshold
="512 useFullyQualifiedRedirectUrl="True" executionTimeout="45" versionHeader="1.1.4128"/> </system.web> </configuration>

IIS 所收到的對某 Microsoft ASP.NET 頁面的每個請求都被移交給 ASP.NET HTTP 管線。HTTP 管線由一系列託管物件組成,這些物件按順序處理該請求,並完成從 URL 到普通 HTML 文字的轉換。HTTP 管線的入口點是 HttpRuntime 類。ASP.NET 基礎結構為輔助程序中所承載的每個 AppDomain 建立此類的一個例項請注意,該輔助程序為當前正在執行的每個 ASP.NET 應用程式維護一個不同的 AppDomain。

要啟用 HTTP 管道,可以建立一個 HttpRuntime 類的新例項,然後呼叫其 ProcessRequest 方法。一個完整的頁面請求會包括下面的流程:
首先被WWW伺服器截獲(inetinfo.exe程序), 該程序首先判斷頁面字尾, 然後根據IIS中配置決定呼叫具體的擴充套件程式。aspx就會呼叫aspnet_isapi.dll,
然後由aspnet_isapi.dll傳送給w3wp.exe(iis 工作者程序,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe)。

接下來在w3wp.exe呼叫.NET類庫進行具體處理,順序如下:ISAPIRuntim, HttpRuntime, HttpApplicationFactory, HttpApplication, HttpModule, HttpHandlerFactory, HttpHandler

ISAPIRuntime:主要作用是呼叫一些非託管程式碼生成HttpWorkerRequest物件,HttpWorkerRequest物件包含當前請求的所有資訊,然後傳遞給HttpRuntime
HttpRuntime:根據HttpWorkerRequest物件生成HttpContext,HttpContext包含request、response等屬性, 再呼叫HttpApplicationFactory來生成IHttpHandler, 呼叫HttpApplication物件執行請求
HttpApplicationFactory: 生成一個HttpApplication物件
HttpApplication:進行HttpModule的初始化,HttpApplication建立針對此Http請求的 HttpContext物件
HttpModule: 當一個HTTP請求到達HttpModule時,整個ASP.NET Framework系統還並沒有對這個HTTP請求做任何處理,也就是說此時對於HTTP請求來講,HttpModule是一個HTTP請求的“必經之路”,所以可以在這個HTTP請求傳遞到真正的請求處理中心(HttpHandler)之前附加一些需要的資訊在這個HTTP請求資訊之上,或者針對截獲的這個HTTP請求資訊作一些額外的工作,或者在某些情況下乾脆終止滿足一些條件的HTTP請求,從而可以起到一個Filter過濾器的作用。
HttpHandlerFactory:把使用者request 轉發到HttpHandlerFactory,再由HttpHandlerFactory例項化HttpHandler物件來相應request
HttpHandle:Http處理程式,處理頁面請求