IIS7.5應(yīng)用程序池集成模式和經(jīng)典模式的區(qū)別介紹
在 IIS 7.5 中,應(yīng)用程序池有兩種運(yùn)行模式:集成模式和經(jīng)典模式。
應(yīng)用程序池模式會(huì)影響服務(wù)器處理托管代碼請(qǐng)求的方式。
如果托管應(yīng)用程序在采用集成模式的應(yīng)用程序池中運(yùn)行,服務(wù)器將使用 IIS 和 ASP.NET 的集成請(qǐng)求處理管道來處理請(qǐng)求。
如果托管應(yīng)用程序在采用經(jīng)典模式的應(yīng)用程序池中運(yùn)行,服務(wù)器會(huì)繼續(xù)通過 Aspnet_isapi.dll 路由托管代碼請(qǐng)求,其處理請(qǐng)求的方式就像應(yīng)用程序在 IIS 6.0 中運(yùn)行一樣。
經(jīng)典模式:
指的是與IIS 6或者之前版本保持兼容的一種模式,一個(gè)典型問題就是,在處理ASP.NET這種動(dòng)態(tài)網(wǎng)站的時(shí)候,它是通過一個(gè)所謂的ISAPI程序,作為插件的方式來工作的。針對(duì)不同的動(dòng)態(tài)應(yīng)用程序(例如ASP,PHP等),會(huì)需要不同的ISAPI。
集成模式:
這種全新的模式,允許我們將ASP.NET更好地與IIS集成,甚至允許我們?cè)贏SP.NET中編寫一些功能(例如Module)來改變IIS的行為(擴(kuò)展)。集成的好處是,不再通過ISAPI的方式,提高了速度和穩(wěn)定性。至于擴(kuò)展,則可以使得我們對(duì)于IIS以及其他類型的請(qǐng)求有更多的控制。
升級(jí)過程中出現(xiàn)了比較多的問題,前面文章也提到過幾個(gè)。這次就主要介紹下httpHandler 和 httpModule 在集成和經(jīng)典模式下的區(qū)別。很多文件上傳等都是需要使用到httpModule去實(shí)現(xiàn)。我今天就出現(xiàn)了NeatUpload在iis7.5下出現(xiàn)未將對(duì)象引用到設(shè)計(jì)實(shí)例的錯(cuò)誤。所以用httpModule作為測(cè)試案例。
1.新建測(cè)試網(wǎng)站W(wǎng)ebApplication,加入MyHttpModule類實(shí)現(xiàn)IHttpModule接口,主要目的是測(cè)試程序是否經(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)典模式應(yīng)用程序池。在web.config的 <system.web> 的子節(jié)點(diǎn)<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

直接切換應(yīng)用程序池成集成模式會(huì)發(fā)現(xiàn)頁面輸出為空。證明程序沒有經(jīng)過HttpModule。那在集成模式下HttpModule如何才能執(zhí)行呢? 之前部署URLRewriter的時(shí)候查資料只知道需要 <system.webServer> <modules>注冊(cè)HttpModule。仔細(xì)查看配置文件會(huì)發(fā)現(xiàn)有一段如下英文.意思大概就是iis7版本的設(shè)置。之前版本無需設(shè)置。
<!--
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配置移動(dòng)到system.webServer中。查閱相關(guān)得到答案確實(shí)如此 詳細(xì)資料見 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>
由于在升級(jí)過程成有一個(gè)站點(diǎn)出現(xiàn) HTTP 錯(cuò)誤 500.22 - Internal Server Error 檢測(cè)到在集成的托管管道模式下不適用的 ASP.NET 設(shè)置

當(dāng)時(shí)在比較急的情況下就直接刪除了 <system.web> 的子節(jié)點(diǎn)<httpModules> 程序正常運(yùn)行。后面通過仔細(xì)和正常的站點(diǎn)對(duì)比是發(fā)現(xiàn)是缺少 <validation validateIntegratedModeConfiguration="false"/> 這個(gè)導(dǎo)致,這個(gè)主要作用是設(shè)置不檢測(cè) <system.web>中的配置
經(jīng)過這今天的折騰終于是對(duì)iis7.5上的部署有了一定了解了。
- 在IIS7、IIS7.5中應(yīng)用程序池最優(yōu)配置方案
- 優(yōu)化IIS7.5支持10萬個(gè)同時(shí)請(qǐng)求的配置方法
- IIS7 應(yīng)用程序池自動(dòng)回收關(guān)閉的解決方案
- 應(yīng)用程序池*將被自動(dòng)禁用,原因是為此應(yīng)用程序池提供服務(wù)的進(jìn)程中出現(xiàn)一系列錯(cuò)誤
- IIS 7.5中神秘的應(yīng)用程序池標(biāo)識(shí)解析(程序池賬戶)
- 解決IIS中應(yīng)用程序池提供服務(wù)的進(jìn)程無法響應(yīng)Ping或進(jìn)程關(guān)閉時(shí)間超過了限制
- 解決IIS7、IIS7.5 應(yīng)用程序池回收假死的方法
- iis應(yīng)用程序池監(jiān)控方法實(shí)例
- IIS應(yīng)用程序池自動(dòng)停止 關(guān)閉 假死 處理集錦
- IIS7.0/IIS7.5/IIS8.0中應(yīng)用程序池最優(yōu)配置方案
相關(guān)文章
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 服務(wù)器安全設(shè)置指南之禁用不必要的服務(wù)和關(guān)閉端口
這篇文章主要介紹了Win2008 R2 WEB 服務(wù)器安全設(shè)置指南之禁用不必要的服務(wù)和關(guān)閉端口,需要的朋友可以參考下2016-06-06
本地連接遠(yuǎn)程服務(wù)器的時(shí)候提示出現(xiàn)身份驗(yàn)證錯(cuò)誤的幾種解決方法
當(dāng)您想要遠(yuǎn)程連接到另一臺(tái)設(shè)備時(shí),通常會(huì)發(fā)生身份驗(yàn)證錯(cuò)誤,并顯示“出現(xiàn)身份驗(yàn)證錯(cuò)誤 要求的函數(shù)不受支持”的彈出窗口2023-06-06
windows server 2008 R2 禁用ipv6和隧道適配器
這篇文章主要介紹了windows server 2008 R2 禁用ipv6和隧道適配器,需要的朋友可以參考下2015-09-09
通過IIS自帶工具Iisapp.vbs查詢哪個(gè)w3wp.exe站點(diǎn)占用資源(cpu或內(nèi)存)
最近互聯(lián)網(wǎng)很多網(wǎng)站用戶被盜取,最近dedecms的漏洞出的比較多,導(dǎo)致很多網(wǎng)站淪陷,因?yàn)榭蛻舻木W(wǎng)站使用了dedecms導(dǎo)致我們其中的一臺(tái)服務(wù)器經(jīng)常無法訪問。2011-12-12
Windows?server?2019搭建域控服務(wù)器的圖文步驟
Windows?Server?2019?支持?Active?Directory(AD)域服務(wù),可以在服務(wù)器上搭建和管理一個(gè)域控制器,本文主要介紹了Windows?server?2019搭建域控服務(wù)器的圖文步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08

