IIS7.5應用程式集區整合模式和傳統模式的區別【轉】

來源:互聯網
上載者:User

標籤:

由於最近公司伺服器上需要將iis的應用程式集區全部都升級到4.0的架構,當然選擇4.0就肯定使用整合模式部署。升級過程中出現了比較多的問題,前面文章也提到過幾個。這次就主要介紹下httpHandler 和 httpModule 在整合和傳統模式下的區別。很多檔案上傳等都是需要使用到httpModule去實現。我今天就出現了NeatUpload在iis7.5下出現未將對象引用到設計執行個體的錯誤。所以用httpModule作為測試案例。

  1. 建立測試網站WebApplication,加入MyHttpModule類實現IHttpModule介面,主要目的是測試程式是否經過了HttpModule,經過的在頁面輸出HttpModule字元。+ View Code?
    12345678910111213141516171819 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. 在IIS7.5部署網站,首先使用傳統模式應用程式集區。在web.config的  <system.web> 的子節點<httpModules> 加入<add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/>+ View Code?
    12345678910 <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>
    訪問網站可以發現頁面輸出如下,說明程式經過了HttpModule

  3. 直接切換應用程式集區成整合模式會發現頁面輸出為空白。證明程式沒有經過HttpModule。那在整合模式下HttpModule如何才能執行呢? 之前部署URLRewriter的時候查資料只知道需要 <system.webServer> <modules>註冊HttpModule。仔細查看設定檔會發現有一段如下英文.意思大概就是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>
    由於在升級過程成有一個網站出現  HTTP 錯誤 500.22 - Internal Server Error 檢測到在整合的託管管道模式下不適用的 ASP.NET 設定 

    當時在比較急的情況下就直接刪除了  <system.web> 的子節點<httpModules> 程式正常運行。後面通過仔細和正常的網站對比是發現是缺少 <validation validateIntegratedModeConfiguration="false"/> 這個導致,這個主要作用是設定不檢測 <system.web>中的配置

    經過這今天的折騰終於是對iis7.5上的部署有了一定瞭解了。

     

    參考資料:http://www.cnblogs.com/buaaboyi/archive/2011/01/20/1939903.html

IIS7.5應用程式集區整合模式和傳統模式的區別【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.