ASP.NET应用程序转到500.21 ...直到IIS重置+清除Tempoary ASP.NET缓存

时间:2009-09-29 22:06:29

标签: asp.net iis-7

我们在QA实验室看到一个奇怪的模式。我们有两个ASP.NET应用程序,每个都部署在同一个Windows 2008 SP2 +框中。我们的应用程序池在域帐户中运行,并设置为永不重新循环。两个应用程序使用相同的1 App Pool。

运行几个小时后,新用户浏览我们应用程序中的页面会收到IIS7错误页面,错误为500.21。

如果我们什么也不做,只有:

1)IISRESET 2)将文件夹更改为c:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET Files和“rd”2个应用程序。

然后浏览我们的网络应用程序,一切都很好。

然后几个小时后,500.21错误返回。

令我感到奇怪的是清除“Temporary ASP.NET Files”文件夹和问题消失之间的关系似乎很奇怪。我在安装新版本的应用程序时尝试清除“Temporary ASP.NET Files”文件夹,但不是这样。

这种关系对任何人来说都很熟悉吗?是否有一些新的IIS7功能在这里工作?

错误文字:

应用程序中的服务器错误“DEFAULT WEB SITE / PAIS”
互联网信息服务7.0
错误摘要
HTTP错误500.21 - 内部服务器错误
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误的模块“ManagedPipelineHandler” 详细错误信息
模块IIS Web核心
通知ExecuteRequestHandler
Handler PageHandlerFactory-Integrated
错误代码0x8007000d
请求的网址http://localhost:80/PAIS/Admin.aspx

物理路径C:\ 0_Georgia \ GA_IS_100142 \ PortfolioArchiveImageServer \ Admin.aspx
登录方法匿名
登录用户匿名
最有可能的原因:
•未安装或未完全安装ASP.NET •发生配置印刷错误 •存在不利的前置条件评估 你可以尝试的事情:
•如果缺少ManagedPipelineHandler,请确保:
o ManagedEngine在。
o ManagedPipelineHandler处于正确的前提条件下 •安装ASP.NET •确保所有system.webServer/handlers@modules都在system.webServer/modules@name中。
•检查和部分中的前提条件 链接和更多信息IIS核心无法识别该模块 查看更多信息»

提前致谢,

霍华德霍夫曼

4 个答案:

答案 0 :(得分:19)

面对同样的问题,修复很容易。

1)打开visual studio 2010命令提示符。

2)运行命令aspnet_regiis.exe -i

答案 1 :(得分:9)

我们在MS ASP.NET支持的帮助下找到了实际问题。这很微妙。我认为MS已经表示他们将在App Fabric版本(现在是RTM)的后续版本中解决这个问题。手指交叉。

在这种情况下,问题始终如一:

1)ASP.NET Web应用程序尚未运行。它包括WCF Net.Pipe和/或Net.Tcp绑定。我认为NetMsmq会出现同样的情况,但没有尝试过。

2)入站NetPipe或NetTcp WCF Windows激活服务请求是启动App域的初始请求。

3)应用程序使用“集成”IIS应用程序池(IIS7或IIS 7.5)

4)应用程序在第一个请求期间使用HttpServerUtility.Execute。

事实证明,我们的应用程序在第一次WCF操作期间触发了ASP.NET运行状况监视事件 - 导致Windows激活服务(WAS)启动应用程序的操作。我们的运行状况监视配置包括TemplatedMailWebEventProvider。

我们的应用程序使用的是“集成”IIS应用程序池。

实现TemplatedMailWebEventProvider以创建HTML格式的电子邮件正文。它使用System.Web.HttpServerUtility.Execute(string, TextWriter, Boolean)重载。

对于这个用例,重载做错了 - 它初始化了一个基于HTTP管道的'经典'IIS应用程序池。因为这是“集成”IIS应用程序池的错误管道,管道会因下一个HTTP请求而被破坏 - 这实际上是第一个入站HTTP请求。

因此,在重新循环应用程序之前,所有未来的HTTP请求都会出现500.21错误。您不需要执行IISRESET的相对激烈的步骤,清除临时ASP.NET缓存以清除错误 - 只需通过保存web.config重新启动应用程序并避免导致错误的特定启动路径。

MS为我们提出了一种解决方法 - 使用SimpleMailWebEventProvider而不是TemplatedMailWebEventProvider。这确实有效,因为它从第一个请求的代码路径中取出HttpServerUtility.Execute。

我建议MS引入一个新的web.config <system.web>布尔设置 - UseIntegrated - 让应用程序指定要初始化的App Pool类型。显然,IIS不会将App Pool类型转发给ASP.NET,所以我的建议是解决 的问题。

TemplatedMailWebEvent提供程序比SimpleMailWebEventProvider更加用户友好,我们希望MS能解决这个问题。

感谢大家的阅读,

霍华德霍夫曼

答案 2 :(得分:0)

1. IIS 7会抛出异常,如下所示
enter image description here

2. 在管理员模式下打开visual studio 2010命令提示符并执行aspnet_regiis.exe -i
enter image description here

3. 问题已修复,如下所示ASP.Net Application和ASP.Net MCV Application正在顺利运行。
enter image description here

答案 3 :(得分:-1)

问题更可能出在应用程序代码中。 Temporary ASP.NET Files文件夹包含应用程序的预编译副本,每次访问应用程序文件时都会刷新。您可以使用\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \文件夹中的aspnet_compiler.exe预编译这些文件。使用-errorstack选项允许生成有关您获得的错误的更多信息。如果长时间运行的应用程序使用大量内存或在inproc会话状态中保留大量数据,那么这些应用程序将无法再循环。如果您的会话包含大量信息,请考虑使用基于sqlserver的会话管理器。