IIS7.5應用程序池集成模式和經(jīng)典模式的區(qū)別介紹
在 IIS 7.5 中,應用程序池有兩種運行模式:集成模式和經(jīng)典模式。
應用程序池模式會影響服務器處理托管代碼請求的方式。
如果托管應用程序在采用集成模式的應用程序池中運行,服務器將使用 IIS 和 ASP.NET 的集成請求處理管道來處理請求。
如果托管應用程序在采用經(jīng)典模式的應用程序池中運行,服務器會繼續(xù)通過 Aspnet_isapi.dll 路由托管代碼請求,其處理請求的方式就像應用程序在 IIS 6.0 中運行一樣。
經(jīng)典模式:
指的是與IIS 6或者之前版本保持兼容的一種模式,一個典型問題就是,在處理ASP.NET這種動態(tài)網(wǎng)站的時候,它是通過一個所謂的ISAPI程序,作為插件的方式來工作的。針對不同的動態(tài)應用程序(例如ASP,PHP等),會需要不同的ISAPI。
集成模式:
這種全新的模式,允許我們將ASP.NET更好地與IIS集成,甚至允許我們在ASP.NET中編寫一些功能(例如Module)來改變IIS的行為(擴展)。集成的好處是,不再通過ISAPI的方式,提高了速度和穩(wěn)定性。至于擴展,則可以使得我們對于IIS以及其他類型的請求有更多的控制。
升級過程中出現(xiàn)了比較多的問題,前面文章也提到過幾個。這次就主要介紹下httpHandler 和 httpModule 在集成和經(jīng)典模式下的區(qū)別。很多文件上傳等都是需要使用到httpModule去實現(xiàn)。我今天就出現(xiàn)了NeatUpload在iis7.5下出現(xiàn)未將對象引用到設計實例的錯誤。所以用httpModule作為測試案例。
1.新建測試網(wǎng)站W(wǎng)ebApplication,加入MyHttpModule類實現(xiàn)IHttpModule接口,主要目的是測試程序是否經(jīng)過了HttpModule,經(jīng)過的在頁面輸出HttpModule字符。
public class MyHttpModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
}
protected void context_BeginRequest(object sender, EventArgs e)
{
var context = sender as HttpApplication;
context.Response.Clear();
context.Response.Write("HttpModule");
context.Response.End();
}
}
2、2.在IIS7.5部署網(wǎng)站,首先使用經(jīng)典模式應用程序池。在web.config的 <system.web> 的子節(jié)點<httpModules> 加入<add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/>
<httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> </httpHandlers> <httpModules> <add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules>
訪問網(wǎng)站可以發(fā)現(xiàn)頁面輸出如下,說明程序經(jīng)過了HttpModule

直接切換應用程序池成集成模式會發(fā)現(xiàn)頁面輸出為空。證明程序沒有經(jīng)過HttpModule。那在集成模式下HttpModule如何才能執(zhí)行呢? 之前部署URLRewriter的時候查資料只知道需要 <system.webServer> <modules>注冊HttpModule。仔細查看配置文件會發(fā)現(xiàn)有一段如下英文.意思大概就是iis7版本的設置。之前版本無需設置。
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not necessary for previous version of IIS.
-->
這樣就大概明白意思是iis7.0之后有部分web配置移動到system.webServer中。查閱相關得到答案確實如此 詳細資料見 http://www.cnblogs.com/buaaboyi/archive/2011/01/20/1939903.html
于是在<system.webServer> <modules>中加入配置如下,刷新頁面,頁面能夠輸出字符HttpModule,證明成功了。
<system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules> <remove name="ScriptModule" /> <add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/> <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </modules>
由于在升級過程成有一個站點出現(xiàn) HTTP 錯誤 500.22 - Internal Server Error 檢測到在集成的托管管道模式下不適用的 ASP.NET 設置

當時在比較急的情況下就直接刪除了 <system.web> 的子節(jié)點<httpModules> 程序正常運行。后面通過仔細和正常的站點對比是發(fā)現(xiàn)是缺少 <validation validateIntegratedModeConfiguration="false"/> 這個導致,這個主要作用是設置不檢測 <system.web>中的配置
經(jīng)過這今天的折騰終于是對iis7.5上的部署有了一定了解了。
相關文章
IIS提示Server Application Error的解決方法集錦
The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.2011-01-01
Win2008 R2 WEB 服務器安全設置指南之禁用不必要的服務和關閉端口
這篇文章主要介紹了Win2008 R2 WEB 服務器安全設置指南之禁用不必要的服務和關閉端口,需要的朋友可以參考下2016-06-06
本地連接遠程服務器的時候提示出現(xiàn)身份驗證錯誤的幾種解決方法
當您想要遠程連接到另一臺設備時,通常會發(fā)生身份驗證錯誤,并顯示“出現(xiàn)身份驗證錯誤 要求的函數(shù)不受支持”的彈出窗口2023-06-06
windows server 2008 R2 禁用ipv6和隧道適配器
這篇文章主要介紹了windows server 2008 R2 禁用ipv6和隧道適配器,需要的朋友可以參考下2015-09-09
通過IIS自帶工具Iisapp.vbs查詢哪個w3wp.exe站點占用資源(cpu或內存)
最近互聯(lián)網(wǎng)很多網(wǎng)站用戶被盜取,最近dedecms的漏洞出的比較多,導致很多網(wǎng)站淪陷,因為客戶的網(wǎng)站使用了dedecms導致我們其中的一臺服務器經(jīng)常無法訪問。2011-12-12
Windows?server?2019搭建域控服務器的圖文步驟
Windows?Server?2019?支持?Active?Directory(AD)域服務,可以在服務器上搭建和管理一個域控制器,本文主要介紹了Windows?server?2019搭建域控服務器的圖文步驟,具有一定的參考價值,感興趣的可以了解一下2023-08-08

