|
|
|
|
|
httpRuntime
是配置asp.net http運(yùn)行時(shí)設(shè)置,以確定如何處理對asp.net應(yīng)用程序的請求。
不過,httpRuntime
代碼需要手動(dòng)添加到web.config
里,但具體添加到哪個(gè)節(jié)點(diǎn)區(qū)塊中,大家不一定知道。如果放置的位置不對,那么設(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)控件所必需的),或者指示是否代之以將相對重定向發(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]"
/>
通過上面的配置說明, 下面是在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 所收到的對某 Microsoft ASP.NET 頁面的每個(gè)請求都被移交給 ASP.NET HTTP 管線。HTTP 管線由一系列托管對象組成,這些對象按順序處理該請求,并完成從 URL 到普通 HTML 文本的轉(zhuǎn)換。HTTP 管線的入口點(diǎn)是 HttpRuntime
類。ASP.NET 基礎(chǔ)結(jié)構(gòu)為輔助進(jìn)程中所承載的每個(gè) AppDomain
創(chuàng)建此類的一個(gè)實(shí)例請注意,該輔助進(jìn)程為當(dāng)前正在運(yùn)行的每個(gè) ASP.NET 應(yīng)用程序維護(hù)一個(gè)不同的 AppDomain
。
要激活 HTTP 管道,可以創(chuàng)建一個(gè) HttpRuntime
類的新實(shí)例,然后調(diào)用其 ProcessRequest
方法。
一個(gè)完整的頁面請求會(huì)包括下面的流程:
首先被WWW服務(wù)器截獲(inetinfo.exe進(jìn)程), 該進(jìn)程首先判斷頁面后綴, 然后根據(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)。
接下來在w3wp.exe調(diào)用.NET類庫進(jìn)行具體處理,順序如下:ISAPIRuntim
, HttpRuntime
, HttpApplicationFactory
, HttpApplication
, HttpModule
, HttpHandlerFactory
, HttpHandler
。
ISAPIRuntime:主要作用是調(diào)用一些非托管代碼生成HttpWorkerRequest
對象,HttpWorkerRequest
對象包含當(dāng)前請求的所有信息,然后傳遞給HttpRuntime
。
HttpRuntime:根據(jù)HttpWorkerRequest
對象生成HttpContext
,HttpContext
包含request、response等屬性, 再調(diào)用HttpApplicationFactory
來生成IHttpHandler
, 調(diào)用HttpApplication
對象執(zhí)行請求。
HttpApplicationFactory:生成一個(gè)HttpApplication
對象。
HttpApplication:進(jìn)行HttpModule
的初始化,HttpApplication
創(chuàng)建針對此Http請求的 HttpContext
對象。
HttpModule:當(dāng)一個(gè)HTTP請求到達(dá)HttpModule
時(shí),整個(gè)ASP.NET Framework系統(tǒng)還并沒有對這個(gè)HTTP請求做任何處理,也就是說此時(shí)對于HTTP請求來講,HttpModule
是一個(gè)HTTP請求的“必經(jīng)之路”,所以可以在這個(gè)HTTP請求傳遞到真正的請求處理中心(HttpHandler
)之前附加一些需要的信息在這個(gè)HTTP請求信息之上,或者針對截獲的這個(gè)HTTP請求信息作一些額外的工作,或者在某些情況下干脆終止?jié)M足一些條件的HTTP請求,從而可以起到一個(gè)Filter過濾器的作用。
HttpHandlerFactory:把用戶request 轉(zhuǎn)發(fā)到HttpHandlerFactory
,再由HttpHandlerFactory
實(shí)例化HttpHandler
對象來相應(yīng)request。
HttpHandle:Http處理程序,處理頁面請求 。