|
|
|
|
|
httpRuntime
是配置asp.net http運行時設置,以確定如何處理對asp.net應用程序的請求。
不過,httpRuntime
代碼需要手動添加到web.config
里,但具體添加到哪個節(jié)點區(qū)塊中,大家不一定知道。如果放置的位置不對,那么設置就不正確,嚴重點還可能影響到web.config
這個文件里的其他設置。
本文介紹httpRuntime
代碼如何正確添加到web.config
里,并提供一個完整的web.config
配置代碼給大家參考。
正確的添加方法是,在web.config
中的<system.web></system.web>
內添加httpRuntime
代碼。
例如:
<system.web>
<httpRuntime
executionTimeout="600"
maxRequestLength="951200"
useFullyQualifiedRedirectUrl="true"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>
</system.web>
實際應用中,<system.web></system.web>
里還有其他的設置代碼,下面是一個完整的web.config
配置代碼:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
<httpRuntime
executionTimeout="600"
maxRequestLength="951200"
useFullyQualifiedRedirectUrl="true"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>
</system.web>
</configuration>
httpRuntime代碼解釋:
http://server/path
" 格式,這是某些移動控件所必需的),或者指示是否代之以將相對重定向發(fā)送到客戶端。如果為 True,則所有不是完全限定的重定向都將自動轉換為完全限定的格式。false 是默認選項。先介紹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
里節(jié)點的設置:
<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
創(chuàng)建此類的一個實例請注意,該輔助進程為當前正在運行的每個 ASP.NET 應用程序維護一個不同的 AppDomain
。
要激活 HTTP 管道,可以創(chuàng)建一個 HttpRuntime
類的新實例,然后調用其 ProcessRequest
方法。
一個完整的頁面請求會包括下面的流程:
首先被WWW服務器截獲(inetinfo.exe進程), 該進程首先判斷頁面后綴, 然后根據IIS中配置決定調用具體的擴展程序。aspx就會調用aspnet_isapi.dll,然后由aspnet_isapi.dll發(fā)送給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
對象執(zhí)行請求。
HttpApplicationFactory:生成一個HttpApplication
對象。
HttpApplication:進行HttpModule
的初始化,HttpApplication
創(chuàng)建針對此Http請求的 HttpContext
對象。
HttpModule:當一個HTTP請求到達HttpModule
時,整個ASP.NET Framework系統(tǒng)還并沒有對這個HTTP請求做任何處理,也就是說此時對于HTTP請求來講,HttpModule
是一個HTTP請求的“必經之路”,所以可以在這個HTTP請求傳遞到真正的請求處理中心(HttpHandler
)之前附加一些需要的信息在這個HTTP請求信息之上,或者針對截獲的這個HTTP請求信息作一些額外的工作,或者在某些情況下干脆終止?jié)M足一些條件的HTTP請求,從而可以起到一個Filter過濾器的作用。
HttpHandlerFactory:把用戶request 轉發(fā)到HttpHandlerFactory
,再由HttpHandlerFactory
實例化HttpHandler
對象來相應request。
HttpHandle:Http處理程序,處理頁面請求 。