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)求處理管道來(lái)處理請(qǐng)求。
如果托管應(yīng)用程序在采用經(jīng)典模式的應(yīng)用程序池中運(yùn)行,服務(wù)器會(huì)繼續(xù)通過(guò) Aspnet_isapi.dll 路由托管代碼請(qǐng)求,其處理請(qǐng)求的方式就像應(yīng)用程序在 IIS 6.0 中運(yùn)行一樣。
經(jīng)典模式:
指的是與IIS 6或者之前版本保持兼容的一種模式,一個(gè)典型問(wèn)題就是,在處理ASP.NET這種動(dòng)態(tài)網(wǎng)站的時(shí)候,它是通過(guò)一個(gè)所謂的ISAPI程序,作為插件的方式來(lái)工作的。針對(duì)不同的動(dòng)態(tài)應(yīng)用程序(例如ASP,PHP等),會(huì)需要不同的ISAPI。
集成模式:
這種全新的模式,允許我們將ASP.NET更好地與IIS集成,甚至允許我們?cè)贏SP.NET中編寫一些功能(例如Module)來(lái)改變IIS的行為(擴(kuò)展)。集成的好處是,不再通過(guò)ISAPI的方式,提高了速度和穩(wěn)定性。至于擴(kuò)展,則可以使得我們對(duì)于IIS以及其他類型的請(qǐng)求有更多的控制。
升級(jí)過(guò)程中出現(xiàn)了比較多的問(wèn)題,前面文章也提到過(guò)幾個(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)過(guò)了HttpModule,經(jīng)過(guò)的在頁(yè)面輸出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èn)網(wǎng)站可以發(fā)現(xiàn)頁(yè)面輸出如下,說(shuō)明程序經(jīng)過(guò)了HttpModule
直接切換應(yīng)用程序池成集成模式會(huì)發(fā)現(xiàn)頁(yè)面輸出為空。證明程序沒(méi)有經(jīng)過(guò)HttpModule。那在集成模式下HttpModule如何才能執(zhí)行呢? 之前部署URLRewriter的時(shí)候查資料只知道需要 <system.webServer> <modules>注冊(cè)HttpModule。仔細(xì)查看配置文件會(huì)發(fā)現(xiàn)有一段如下英文.意思大概就是iis7版本的設(shè)置。之前版本無(wú)需設(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ì)資料見(jiàn) http://www.cnblogs.com/buaaboyi/archive/2011/01/20/1939903.html
于是在<system.webServer> <modules>中加入配置如下,刷新頁(yè)面,頁(yè)面能夠輸出字符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í)過(guò)程成有一個(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)行。后面通過(guò)仔細(xì)和正常的站點(diǎn)對(duì)比是發(fā)現(xiàn)是缺少 <validation validateIntegratedModeConfiguration="false"/> 這個(gè)導(dǎo)致,這個(gè)主要作用是設(shè)置不檢測(cè) <system.web>中的配置
經(jīng)過(guò)這今天的折騰終于是對(duì)iis7.5上的部署有了一定了解了。
- 在IIS7、IIS7.5中應(yīng)用程序池最優(yōu)配置方案
- 優(yōu)化IIS7.5支持10萬(wàn)個(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)程無(wú)法響應(yīng)Ping或進(jìn)程關(guān)閉時(shí)間超過(guò)了限制
- 解決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)文章
windows2003 apache配置虛擬主機(jī)和綁定域名服務(wù)
年前就找朋友申請(qǐng)一個(gè)域名,由于工作比較忙也沒(méi)弄,昨天下午在搞apache虛擬主機(jī)配置,試了很多次就是不行,不知道怎么搞。今天上午終于找到原因了。。。。。。。。。自己太粗心了,忘了一個(gè)設(shè)置。實(shí)在慚愧??!2009-02-02淺析ASP.NET安全性分析(加強(qiáng)asp.net 1.1/2.0安全性)
本文介紹ASP.NET安全性是Web 應(yīng)用程序中一個(gè)非常重要的方面,它涉及內(nèi)容非常廣泛,以及介紹講述如何利用IIS以及Forms 身份驗(yàn)證構(gòu)建安全的2012-11-11Windows Server2022 DHCP服務(wù)器配置(圖文)
本文詳細(xì)介紹了在Windows 2022系統(tǒng)中配置DHCP服務(wù)器的方法,包括IP地址范圍、租約期限等設(shè)置,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09怎樣通過(guò)iisapp命令查找pid來(lái)解決IIS的cpu占用率過(guò)高問(wèn)題
有些時(shí)候發(fā)現(xiàn)服務(wù)器的一些iis進(jìn)程占用資源比較大,用下面的方法可以盡快的解決。2009-03-03windows下rsync的數(shù)據(jù)同步安裝配置方法
windows下使用cwrsync同步數(shù)據(jù)的設(shè)置方法的參考資料,最后本站將會(huì)提供一個(gè)已測(cè)的方法,奉獻(xiàn)給大家2008-09-09php對(duì)外發(fā)包解決方案(導(dǎo)致w3wp.exe很占cpu)
針對(duì)最近php程序突發(fā)性對(duì)外發(fā)包的問(wèn)題,我司特提出php對(duì)外發(fā)包解決方案,希望可以幫助服務(wù)器托管用戶和vps主機(jī)用戶解決疑難2011-12-12