案例研究:AspNetInitClrHostFailureModule中的“HTTP錯誤500.0 - 內部服務器錯誤”
症狀
當用戶訪問在Windows Server 2008 R2計算機上運行的ASP.NET應用程序時,會收到以下“HTTP錯誤500.0 - 內部服務器錯誤”消息。
HTTP錯誤500.0 - 內部服務器錯誤 在Web服務器的應用程序事件日志中可以找到詳細描述此特定請求失敗原因的錯誤消息。請查看此日志條目,以發現導致此錯誤發生的原因。 |
詳細的錯誤信息是:
模塊AspNetInitClrHostFailureModule |
請求的URL http:// localhost:80 / default.aspx |
通知BeginRequest |
物理路徑C:\ inetpub \ wwwroot \ default.aspx |
Handler PageHandlerFactory-Integrated-4.0 |
登錄方法尚未確定 |
錯誤代碼0x80070002 |
登錄用戶尚未確定 |
您可能會注意到一個罕見的模塊AspNetInitClrHostFailureModule出現,並且錯誤代碼是0x80070002這意味着“系統找不到指定的文件”。
在應用程序事件日志中出現相應的錯誤:
日志名稱:應用程序 資料來源:Microsoft-Windows-IIS-W3SVC-WP 事件ID:2299 級別:錯誤 描述: 一個應用程序報告為不健康。工作進程現在將要求回收。給出的原因:在Web服務器的應用程序事件日志中可以找到詳細描述此特定請求失敗原因的錯誤消息。請查看此日志條目,以發現導致此錯誤發生的原因。 。數據是錯誤的。 |
顯然上面的信息不能把我們引向原因。
另一個發現是,這台服務器上的所有ASP.NET 2.0應用程序工作正常。這個問題只發生在.NET 4.0上。
故障排除
起初,我嘗試着從Process Monitor的錯誤代碼“ 0x80070002 ” 開始排除故障。我也嘗試使用失敗的請求追蹤。
我不能用各種工具找出原因,直到我不得不啟動實時調試會話。讓我們直接轉到根本原因。
根本原因
雖然.NET 4.0已安裝在此計算機上,但%windir%\ system32 \ mscoree.dll的版本仍為v2.0。它應該被替換為4.0版本。
它加載.NET 2.0運行時mscorwks.dll,而不是.NET 4.0運行時clr.dll。因此,CLR初始化期間會發生一些意外行為,導致工作進程被回收。
解析度
您可以重新安裝.NET 4.0或重新應用Windows 2008 R2 SP1來更新mscoree.dll。
結論
“HTTP錯誤500.0 -內部服務器錯誤”從AspNetInitClrHostFailureModule意味着什么的CLR初始化過程中出錯。我們需要檢查%windir%\ system32 \ mscoree.dll的版本。
總的來說一句話:.net版本不匹配,不能把.net 4.0以上的web網站放到.net 2.0的IIS上,在應用池中應該更改為.net 4.0版本