首页 文章

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

提问于
浏览
12

我们的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
处理程序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 回答

  • 19

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

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

    2)运行命令 aspnet_regiis.exe -i

  • 0

    我们在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 - 让应用程序指定应用程序池的类型初始化 . 显然,IIS不会将App Pool类型转发给ASP.NET,所以我的建议就是解决这个问题 .

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

    谢谢大家的阅读,

    霍华德霍夫曼

  • -1

    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

  • 9

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

相关问题