|
|
|
|
|
幾天前配置一個IIS環(huán)境的網(wǎng)站時,出現(xiàn)500錯誤。根據(jù)錯誤提示,很快把問題解決了,現(xiàn)記錄一下,希望能幫到遇到同樣問題的網(wǎng)友。
問題描述
應(yīng)用程序“DEFAULT WEB SITE”中的服務(wù)器錯誤Internet Information Services 7.5
錯誤摘要
HTTP 錯誤 500.24 - Internal Server Error
檢測到在集成的托管管道模式下不適用的 ASP.NET 設(shè)置。
詳細(xì)錯誤信息
模塊 ConfigurationValidationModule
通知 BeginRequest
處理程序 StaticFile
錯誤代碼 0x80070032
請求的 URL ----------
物理路徑 ---------
登錄方法 尚未確定
登錄用戶 尚未確定
最可能的原因:
- system.web/identity@impersonate 設(shè)置為 true。
可嘗試的操作:
- 如果應(yīng)用程序支持它,則禁用客戶端模擬。
- 如果你確信可以忽略此錯誤,則可以通過將 system.webServer/validation@validateIntegratedModeConfiguration 設(shè)置為 false 來禁用它。
- 使用經(jīng)典 .NET 模式將此應(yīng)用程序移到應(yīng)用程序池 - 例如,%SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool"
(可以將“Classic .NET AppPool”設(shè)置為在經(jīng)典托管管道模式下運行的其他應(yīng)用程序池的名稱) 鏈接和更多信息如果你不清楚或無法使用前兩個選項,則首選的做法是將此應(yīng)用程序切換到經(jīng)典模式。
解決方法
根據(jù)錯誤描述,“最可能的原因”是:system.web/identity@impersonate 設(shè)置為 true。那我就在網(wǎng)站配置文件web.config
里把此設(shè)置的true改為false。結(jié)果,問題就解決了。
我試試在網(wǎng)站配置文件web.config
里把方法一的設(shè)置語句刪除,結(jié)果,問題也能解決??梢姡?strong>system.web/identity@impersonate 的默認(rèn)值為 false。
如果不更改web.config
配置文件,我們也可以把應(yīng)用程序池的“托管管道模式”的“集成”改為“經(jīng)典”。如下圖:
總結(jié)
上面就是此文所述問題的三種解決方法了。
知識擴(kuò)展:應(yīng)用程序池的集成模式和經(jīng)典模式
在管道中,應(yīng)用程序池有兩種運行模式:集成模式和經(jīng)典模式。
應(yīng)用程序池模式會影響服務(wù)器處理托管代碼請求的方式。
如果托管應(yīng)用程序在采用集成模式的應(yīng)用程序池中運行,服務(wù)器將使用 IIS 和 ASP.NET 的集成請求處理管道來處理請求。
如果托管應(yīng)用程序在采用經(jīng)典模式的應(yīng)用程序池中運行,服務(wù)器會繼續(xù)通過 Aspnet_isapi.dll 路由托管代碼請求,其處理請求的方式就像應(yīng)用程序在 IIS 6.0 中運行一樣。
指的是與IIS 6或者之前版本保持兼容的一種模式,一個典型問題就是,在處理ASP.NET這種動態(tài)網(wǎng)站的時候,它是通過一個所謂的ISAPI程序,作為插件的方式來工作的。針對不同的動態(tài)應(yīng)用程序(例如ASP,PHP等),會需要不同的ISAPI。
在IIS7之前,如IIS6或IIS5,請求處理管道分為兩個:IIS請求處理管道和ASP.NET管道,若客戶端請求靜態(tài)資源則只有IIS管道進(jìn)行處理,而ASP.NET管道不會處理該請求。從IIS7開始兩個管道合二為一,稱為集成管道。這種全新的模式,允許我們將ASP.NET更好地與IIS集成,甚至允許我們在ASP.NET中編寫一些功能(例如Module)來改變IIS的行為(擴(kuò)展)。集成的好處是,不再通過ISAPI的方式,提高了速度和穩(wěn)定性。至于擴(kuò)展,則可以使得我們對于IIS以及其他類型的請求有更多的控制。