我们在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核心无法识别该模块
查看更多信息»
提前致谢,
霍华德霍夫曼答案 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会抛出异常,如下所示
2. 在管理员模式下打开visual studio 2010命令提示符并执行aspnet_regiis.exe -i
3. 问题已修复,如下所示ASP.Net Application和ASP.Net MCV Application正在顺利运行。
答案 3 :(得分:-1)
问题更可能出在应用程序代码中。 Temporary ASP.NET Files文件夹包含应用程序的预编译副本,每次访问应用程序文件时都会刷新。您可以使用\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \文件夹中的aspnet_compiler.exe预编译这些文件。使用-errorstack选项允许生成有关您获得的错误的更多信息。如果长时间运行的应用程序使用大量内存或在inproc会话状态中保留大量数据,那么这些应用程序将无法再循环。如果您的会话包含大量信息,请考虑使用基于sqlserver的会话管理器。