|
|
|
|
|
httpRuntime
是配置asp.net http運(yùn)行時(shí)設(shè)置,以確定如何處理對(duì)asp.net應(yīng)用程序的請(qǐng)求。
不過(guò),httpRuntime
代碼需要手動(dòng)添加到web.config
里,但具體添加到哪個(gè)節(jié)點(diǎn)區(qū)塊中,大家不一定知道。如果放置的位置不對(duì),那么設(shè)置就不正確,嚴(yán)重點(diǎn)還可能影響到web.config
這個(gè)文件里的其他設(shè)置。
本文介紹httpRuntime
代碼如何正確添加到web.config
里,并提供一個(gè)完整的web.config
配置代碼給大家參考。
正確的添加方法是,在web.config
中的<system.web></system.web>
內(nèi)添加httpRuntime
代碼。
例如:
<system.web>
<httpRuntime
executionTimeout="600"
maxRequestLength="951200"
useFullyQualifiedRedirectUrl="true"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>
</system.web>
實(shí)際應(yīng)用中,<system.web></system.web>
里還有其他的設(shè)置代碼,下面是一個(gè)完整的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
" 格式,這是某些移動(dòng)控件所必需的),或者指示是否代之以將相對(duì)重定向發(fā)送到客戶端。如果為 True,則所有不是完全限定的重定向都將自動(dòng)轉(zhuǎn)換為完全限定的格式。false 是默認(rèn)選項(xiàng)。先介紹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]"
/>
通過(guò)上面的配置說(shuō)明, 下面是在Web.Config
里節(jié)點(diǎn)的設(shè)置:
<configuration>
<system.web>
<httpRuntime
maxRequestLength="4000"
enable = "True"
requestLengthDiskThreshold="512
useFullyQualifiedRedirectUrl="True"
executionTimeout="45"
versionHeader="1.1.4128"
/>
<system.web>
<configuration>
IIS 所收到的對(duì)某 Microsoft ASP.NET 頁(yè)面的每個(gè)請(qǐng)求都被移交給 ASP.NET HTTP 管線。HTTP 管線由一系列托管對(duì)象組成,這些對(duì)象按順序處理該請(qǐng)求,并完成從 URL 到普通 HTML 文本的轉(zhuǎn)換。HTTP 管線的入口點(diǎn)是 HttpRuntime
類。ASP.NET 基礎(chǔ)結(jié)構(gòu)為輔助進(jìn)程中所承載的每個(gè) AppDomain
創(chuàng)建此類的一個(gè)實(shí)例請(qǐng)注意,該輔助進(jìn)程為當(dāng)前正在運(yùn)行的每個(gè) ASP.NET 應(yīng)用程序維護(hù)一個(gè)不同的 AppDomain
。
要激活 HTTP 管道,可以創(chuàng)建一個(gè) HttpRuntime
類的新實(shí)例,然后調(diào)用其 ProcessRequest
方法。
一個(gè)完整的頁(yè)面請(qǐng)求會(huì)包括下面的流程:
首先被WWW服務(wù)器截獲(inetinfo.exe進(jìn)程), 該進(jìn)程首先判斷頁(yè)面后綴, 然后根據(jù)IIS中配置決定調(diào)用具體的擴(kuò)展程序。aspx就會(huì)調(diào)用aspnet_isapi.dll,然后由aspnet_isapi.dll發(fā)送給w3wp.exe(iis 工作者進(jìn)程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe)。
接下來(lái)在w3wp.exe調(diào)用.NET類庫(kù)進(jìn)行具體處理,順序如下:ISAPIRuntim
, HttpRuntime
, HttpApplicationFactory
, HttpApplication
, HttpModule
, HttpHandlerFactory
, HttpHandler
。
ISAPIRuntime:主要作用是調(diào)用一些非托管代碼生成HttpWorkerRequest
對(duì)象,HttpWorkerRequest
對(duì)象包含當(dāng)前請(qǐng)求的所有信息,然后傳遞給HttpRuntime
。
HttpRuntime:根據(jù)HttpWorkerRequest
對(duì)象生成HttpContext
,HttpContext
包含request、response等屬性, 再調(diào)用HttpApplicationFactory
來(lái)生成IHttpHandler
, 調(diào)用HttpApplication
對(duì)象執(zhí)行請(qǐng)求。
HttpApplicationFactory:生成一個(gè)HttpApplication
對(duì)象。
HttpApplication:進(jìn)行HttpModule
的初始化,HttpApplication
創(chuàng)建針對(duì)此Http請(qǐng)求的 HttpContext
對(duì)象。
HttpModule:當(dāng)一個(gè)HTTP請(qǐng)求到達(dá)HttpModule
時(shí),整個(gè)ASP.NET Framework系統(tǒng)還并沒(méi)有對(duì)這個(gè)HTTP請(qǐng)求做任何處理,也就是說(shuō)此時(shí)對(duì)于HTTP請(qǐng)求來(lái)講,HttpModule
是一個(gè)HTTP請(qǐng)求的“必經(jīng)之路”,所以可以在這個(gè)HTTP請(qǐng)求傳遞到真正的請(qǐng)求處理中心(HttpHandler
)之前附加一些需要的信息在這個(gè)HTTP請(qǐng)求信息之上,或者針對(duì)截獲的這個(gè)HTTP請(qǐng)求信息作一些額外的工作,或者在某些情況下干脆終止?jié)M足一些條件的HTTP請(qǐng)求,從而可以起到一個(gè)Filter過(guò)濾器的作用。
HttpHandlerFactory:把用戶request 轉(zhuǎn)發(fā)到HttpHandlerFactory
,再由HttpHandlerFactory
實(shí)例化HttpHandler
對(duì)象來(lái)相應(yīng)request。
HttpHandle:Http處理程序,處理頁(yè)面請(qǐng)求 。