httpRuntime與ASP.NET 運行時及IIS處理模型

来源:http://www.cnblogs.com/HopeGi/archive/2016/10/13/5955104.html
-Advertisement-
Play Games

配置 ASP.NET HTTP 運行時設置,以確定如何處理對 ASP.NET 應用程式的請求,配置節及其描述如下所示。 <httpRuntime executionTimeout="110" 指定在被 ASP.NET 自動關閉前,允許執行請求的最大秒數 maxRequestLength="4096" ...


配置 ASP.NET HTTP 運行時設置,以確定如何處理對 ASP.NET 應用程式的請求,配置節及其描述如下所示。

   

<httpRuntime

executionTimeout="110"--------------------------指定在被 ASP.NET 自動關閉前,允許執行請求的最大秒數

maxRequestLength="4096"--------------------------指定輸入流緩衝閾值限制(以 KB 為單位)。此限制可用於防止拒絕服務攻擊;例如,因用戶向伺服器發送大型文件而導致的拒絕服務攻擊。

requestLengthDiskThreshold="256"--------------------------定輸入流緩衝閾值限制(以位元組為單位)。該值不應超過 maxRequestLength 屬性。

useFullyQualifiedRedirectUrl="false"

minFreeThreads="8"--------------------------請求時空閑時最小線程數

minLocalRequestFreeThreads="4"--------------------------本地請求時最小的空閑線程數

appRequestQueueLimit="5000"--------------------------指定 ASP.NET 將為應用程式排隊的請求的最大數目。當沒有足夠的自由線程來處理請求時,將對請求進行排隊。當隊列超出了該屬性中指定的限制時,將通過"503 - 伺服器太忙"錯誤信息拒絕傳入的請求。

enableKernelOutputCache="true"--------------------------啟用輸出緩存 IIS6以後版本生效

enableVersionHeader="true"--------------------------是否在頭部輸出版本

requireRootedSaveAsPath="true"--------------------------指定 SaveAs 方法中的 filename 參數是否必須為絕對路徑。ASP.NET 進程必須具有在指定位置中創建文件的許可權。

enable="true"--------------------------相當於關閉應用程式(連靜態頁面也無法訪問)指定是否在當前的節點及子節點級別啟用應用程式域 (AppDomain),以接受傳入的請求。如果為 False,則實際上關閉了該應用程式

shutdownTimeout="90"--------------------------關閉超時單位 指定允許輔助進程關閉的分鐘數。在達到該超時時間時,ASP.NET 關閉輔助進程。

delayNotificationTimeout="5"--------------------------延遲通知超時時間 秒為單位

waitChangeNotification="0"--------------------------等待變更通知

maxWaitChangeNotification="0"--------------------------最大等待變更通知數

requestPriority="Normal"--------------------------請求策略

enableHeaderChecking="true"--------------------------啟用頭部檢查 以檢測可能的註入式攻擊。如果檢測到攻擊,ASP.NET 將返回錯誤作為響應。

sendCacheControlHeader="true"--------------------------指定是否發送預設情況下設置為 Private 的緩存控制標頭。如果為 True,則客戶端緩存被禁用。

apartmentThreading="false"-----------啟用單元線程處理以實現傳統的 ASP 相容性。

/>

   

從上面的特性而言大概概括成HttRuntime的自身運行方面(包括重啟時間,線程數控制,請求隊列),請求頭限制響應輸出。

而HttpRuntime還涉及到其他方面,如Http管道,IIS的運行模型。有其他博文從代碼角度列舉了從一個請求到達後,在AppDomain中創建HttpRuntime,HttpContext,HttpApplication,各個HttpModule,到HttpHandler處理。

舍長的《深入理解ASP.NET的內部運行機制

此外之前在看Http管道時一直沒仔細去搞清楚IIS的處理模型,在此也補一補。IIS到我現在看為止已經到了7.0的版本,網上有不少資料從5.0開始說起,既然如此就從5.0說起,看看其變遷。

以下圖片均摘自蔣金楠老是的著作《ASP.NET MVC 4 框架揭秘》

IIS5處理模型

IIS 5.x 運行在進程 InetInfo.exe 中,該進程寄宿著一個名為 World Wide Web Publishing Service(簡稱 W3SVC)的 Windows 服務。 W3SVC 的主要功能包括 HTTP 請求的監聽、工作進程和配置管理(通過從 Metabase 中載入相關配置信息)等。

如果我們請求的是一個基於 ASP.NET 的資源類型,比如.aspx .asmx .svc 等,aspnet_isapi.dll 會被載入,而 ASP.NET ISAPI 擴展會創建 ASP.NET 的工作進程(如果該進程尚未啟動)。對於 IIS 5.x 來說,該工作進程為 aspnet.exe IIS 進程與工作進程之間通過命名管道( Named Pipes)進行通信。

在工作進程初始化過程中, .NET 運行時( CLR)被載入進而構建了一個托管的環境。對於某個 Web 應用的初次請求, CLR 會為其創建一個應用程式域( Application Domain)。在應用程式域中, HTTP 運行時( HTTP Runtime)被載入並用以創建相應的應用。寄宿於IIS 5.x 的所有 Web 應用都運行在同一個進程(工作進程 aspnet_wp.exe)的不同應用程式域中。

IIS6處理模型

IIS5中有兩個弊端,其一是ISAPI與工作進程分離,會存在性能瓶頸;其二是所有ASP.NET應用程式存在於同一個進程中,應用程式間會存在影響。

針對這兩個問題,作了兩個改進,引入了應用程式池以及把ISAPI放到工作進程中。

此外IIS6中在系統內核層面引入了HTTP.SYS處理監聽HTTP請求。其好處是可以持續監聽,更好的穩定性和內核模式下數據緩存。Inetinfo.exe單純用於存儲ISAPI的配置信息,W3SVC則寄宿於另一個進程SvcHost.exe中,其內部職能並沒有發生任何變化,功能實現做了改進。

   

IIS7處理模型

在IIS7中引入了 Windows進程激活服務( Windows Process Activation Service WAS)的引入,將原來( IIS 6.0 W3SVC承載的部分功能分流給了 WAS。實際上是對監聽這一環節開放了可擴展的介面。W3SVC還是存儲原有的HTTP請求的監聽,但這也成為了它唯一的職責,後續的讀取ISAPI信息和工作進程管理那塊則移交給WAS。擴展的監聽介面看介紹是在WCF方面比較有用,現在暫且不關註它。ISAPI的配置信息也不依賴於原有的Metabase,改用了applicationHost.config。

IIS7的集成模式肯定也要提到,在前面介紹httpHandlers的時候也提到IIS7有經典模式和集成模式。IIS7之前是使用雙管道處理Http請求,在IIS中有一堆模塊處理(例如身份認證),同樣在Http管道中有重覆的處理。而在IIS7中新增了集成模式可以使得這兩個管道處理變成單一管道統一處理。IIS7中同樣保留了雙管道的處理模式,稱之為經典模式。在經典模式中對擴展的HttpModule和HttpHandler只作用於ISAPI擴展過的這些資源,但對靜態資源是沒有作用的,假設使用了集成模式,因為是單一管道統一處理,不管動態還是靜態都會被httpModule和HttpHandler處理。

上面介紹的幾個IIS處理模型都是在HttpRuntime生成前,到了.NET Runtime的範圍內,HttpRuntime才開始被創建出來。關於如何被生成,如何被調用鄙人則不想再粘貼代碼了。想看的話還是那個鏈接:舍長的《深入理解ASP.NET的內部運行機制》。

以上都是人云亦云的內容,在經峰哥教導後我覺得這樣學習就不踏實了,可惜好像還沒有任何有效途徑去驗證這些說法。至少在MSDN上也還沒發現相關內容。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 調用百度api微博熱門精選介面,使用了volley,簡單說說volley get的請求方式的使用 header的設置和請求參數的設置,見代碼如下: ...
  • 目錄 1. ApiController 2. HttpActionDescriptor 3. IHttpActionSelector ApiController 在上節中,講到如何選擇並激活對應的IHttpController,而一般我們在開發中使用的是ApiController 在ApiContr ...
  • 編寫MFC程式時,想列印出調試信息,使用cout後,發現程式並沒有像想象中那樣自動彈出命令行視窗,要輸出的信息也沒地方去查看。百度後知道要手動調出命令行視窗,才可以看到輸出的信息。 百度上介紹了兩種方法,一種是通過添加代碼,在程式中建立命令行視窗的對象。這裡介紹一種比較簡單的方法。 右鍵解決方案,打 ...
  • 1、視圖中 2、控制器的action中 3、過濾器中 比如在ActionFilterAttribute中,這個時候一般是自己實現一個繼承類,然後重寫相關的方法。 在重寫的方法中如果需要控制器的名稱。 4、公共方法中 ...
  • (本文是從我的舊博客遷移過來的) 問題地址:http://acm.timus.ru/problem.aspx?space=1&num=1258 前幾日在博客園看到這種線上測試的時候,有一種相見恨晚的感覺,於是隨便選了一道感興趣的題(No.1258:Pool)開始做。為了準確瞭解題的意思,我把題翻譯成 ...
  • 本次將要很大家分享的是一個跨平臺運行的服務插件 - TaskCore.MainForm,此框架是使用.netcore來寫的,現在netcore已經支持很多系統平臺運行了,所以將以前的Task.MainForm改良成跨平臺的服務共大家使用和相互交流;本來這篇應該分享的是nginx+iis+redis+ ...
  • ...
  • 剖析 AssemblyInfo.cs - 從這裡瞭解常用的特性 Attribute 【博主】反骨仔 【原文】http://www.cnblogs.com/liqingwen/p/5944391.html 序 上次,我們通過《C# 知識回顧 - 特性 Attribute》已經瞭解如何創建和使用特性 A ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...