技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類目錄

贊助商

最新文章

搜索

httpRuntime代碼放在web.config哪里?深度了解httpRuntime

作者:admin    時(shí)間:2018-5-10 10:56:32    瀏覽:

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配置代碼給大家參考。

httpRuntime代碼放在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代碼解釋:

  • executionTimeout:表示允許執(zhí)行請(qǐng)求的最大時(shí)間限制,單位為秒。
  • maxRequestLength:指示 ASP.NET 支持的最大文件上載大小。該限制可用于防止因用戶將大量文件傳遞到該服務(wù)器而導(dǎo)致的拒絕服務(wù)攻擊。指定的大小以 KB 為單位。默認(rèn)值為 4096 KB (4 MB)。
  • useFullyQualifiedRedirectUrl:表示指示客戶端重定向是否是完全限定的(采用 "http://server/path" 格式,這是某些移動(dòng)控件所必需的),或者指示是否代之以將相對(duì)重定向發(fā)送到客戶端。如果為 True,則所有不是完全限定的重定向都將自動(dòng)轉(zhuǎn)換為完全限定的格式。false 是默認(rèn)選項(xiàng)。
  • minFreeThreads:表示指定允許執(zhí)行新請(qǐng)求的自由線程的最小數(shù)目。ASP.NET 為要求附加線程來(lái)完成其處理的請(qǐng)求而使指定數(shù)目的線程保持自由狀態(tài)。默認(rèn)值為 8。
  • minLocalRequestFreeThreads:表示ASP.NET 保持的允許執(zhí)行新本地請(qǐng)求的自由線程的最小數(shù)目。該線程數(shù)目是為從本地主機(jī)傳入的請(qǐng)求而保留的,以防某些請(qǐng)求在其處理期間發(fā)出對(duì)本地主機(jī)的子請(qǐng)求。這避免了可能的因遞歸重新進(jìn)入 Web 服務(wù)器而導(dǎo)致的死鎖。
  • appRequestQueueLimit:表示ASP.NET 將為應(yīng)用程序排隊(duì)的請(qǐng)求的最大數(shù)目。當(dāng)沒(méi)有足夠的自由線程來(lái)處理請(qǐng)求時(shí),將對(duì)請(qǐng)求進(jìn)行排隊(duì)。當(dāng)隊(duì)列超出了該設(shè)置中指定的限制時(shí),將通過(guò)“503 - 服務(wù)器太忙”錯(cuò)誤信息拒絕傳入的請(qǐng)求。
  • enableVersionHeader:表示指定 ASP.NET 是否應(yīng)輸出版本標(biāo)頭。Microsoft Visual Studio 2005 使用該屬性來(lái)確定當(dāng)前使用的 ASP.NET 版本。對(duì)于生產(chǎn)環(huán)境,該屬性不是必需的,可以禁用。

深度了解HttpRuntime

先介紹HttpRuntimeWeb.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)求 。

標(biāo)簽: httpRuntime  
相關(guān)文章
    x
    • 站長(zhǎng)推薦
    /* 左側(cè)顯示文章內(nèi)容目錄 */