【轉】檢測到在集成的託管管道模式下不適用的ASP.NET設置的解決方法(非簡單設置爲【經典】模式)。

檢測到在集成的託管管道模式下不適用的ASP.NET設置的解決方法(非簡單設置爲【經典】模式)。html

 


  咱們將ASP.NET程序從IIS6移植到IIS7,可能運行提示如下錯誤:web

  HTTP 錯誤 500.23 - Internal Server Errorapi

  檢測到在集成的託管管道模式下不適用的 ASP.NET 設置。服務器

  爲何會出現以上錯誤?性能

  在IIS7的應用程序池有兩種模式,一種是「集成模式」,一種是「經典模式」。網站

  經典模式 則是咱們之前習慣的IIS 6 的方式。搜索引擎

  若是使用集成模式,那麼對自定義的httpModules 和 httpHandlers 就要修改配置文件,須要將他們轉移到<modules>和<hanlders>節裏去。spa

  兩種解決方法:插件

 

  第一種方法:配置應用程序池

  在IIS7上配置應用程序池,而且將程序池的模式改成「經典」,以後一切正常。如圖:code

在搜索引擎輸入上面提示的錯誤消息,搜索到的結果幾乎都是直接改成「經典」便淺嘗輒止了。

但這樣只是權宜之計,用了IIS7.x,但實際只發揮了6的功能,另外,在一些ASP.NET MVC程序中的效果也很差,因此,咱們嘗試如下解決方法:

 

第二種方法:修改web.config配置文件:

 

例如原先設置(你的環境中可能沒有httpModules,httpHandlers節點)

?
< system.web >
 
     ............
 
     < httpModules >
         < add name = "MyModule" type = "MyApp.MyModule" />
     </ httpModules >
     < httpHandlers >
       < add path = "*.myh" verb = "GET" type = "MyApp.MyHandler" />
     </ httpHandlers >
 
 
</ system.web >

 在IIS7應用程序池爲「集成模式」時,改成:

?
< system.web >
 
     ...........
 
</ system.web >
 
< system.webServer >
 
     < modules >
       < add name = "MyModule" type = "MyApp.MyModule" />     
     </ modules >
     < handlers >
       < add name = "MyHandler" path = "*.myh" verb = "GET" type = "MyApp.MyHandler" preCondition = "integratedMode" />
     </ handlers >
 
</ system.webServer >

 (若是你的web.config沒有httpModules,httpHandlers節點,則直接在節點system.webServer中添加:

   <validation validateIntegratedModeConfiguration="false" />   這樣能夠禁止驗證集成模式,避免錯誤提示。

經典模式(classic mode)VS 集成模式(Integrated mode)

經典模式下,IIS會用ISAPI擴展(ISAPI extension aspnet_isapi.dll)和 ISAPI過濾器(ISAPI filter aspnet_filter.dll)來調用ASP.NET運行庫來處理請求。若是使用經典模式的話,服務器會用兩種管道來處理請求一個負責源代碼,另一個負責託管代碼。在這種模式下,應用程序不能充分使用IIS7.X提供的服務。
 
集成模式是一種統一的請求處理管道,它將ASP.NET請求管道與IIS核心管道組合在一塊兒。在集成模式下,ASP.NET從IIS插件(IIS extension)的角色進入了IIS的核心去監測每一個請求和操做。在集成模式下,ASP.NET能更有效的在IIS下運行,而且能夠有效的提升網站的性能。 有些在IIS6開發的代碼須要運行於經典模式,由於在集成模式下會出現錯誤信息。
 
要想更有效的使用IIS7提供的服務, 建議將網站放在集成模式下,而後根據錯誤信息的提示解決那個問題。
相關文章
相關標籤/搜索