案例研究: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版本