欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IIS7.5應用程序池集成模式和經(jīng)典模式的區(qū)別介紹

 更新時間:2012年08月07日 22:50:22   投稿:mdxy-dxy  
由于最近公司服務器上需要將iis的應用程序池全部都升級到4.0的框架,當然選擇4.0就肯定使用集成模式部署

在 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上的部署有了一定了解了。

相關文章

最新評論