我们的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功能在这里工作?
错误文字:
在应用程序"默认Web站点/国家报"中的服务器错误
Internet信息服务7.0
错误摘要
HTTP错误500.21 -内部服务器错误
处理程序"PageHandlerFactory集成"有一个坏模块"ManagedPipelineHandler"在其模块列表
详细错误信息
模块IIS Web核心
通知ExecuteRequestHandler
处理程序PageHandlerFactory-集成
错误代码0x8007000d
请求的URL http:// localhost:80/PAIS/Admin.aspx
物理路径C:\ 0_Georgia\GA_IS_100142\PortfolioArchiveImageServer\Admin.aspx
登录方法匿名
登录用户匿名
最有可能的原因:
•未安装ASP.NET或未完全安装ASP.NET.
•发生配置印刷错误.
•存在不利的前置条件评估.
您可以尝试的事项:
•如果缺少ManagedPipelineHandler,请确保:
o ManagedEngine所在.
o ManagedPipelineHandler具有正确的前置条件.
•安装ASP.NET.
•确保所有system.webServer/handlers@modules都在system.webServer/modules@name中.
•查看和部分中的前提条件.
链接和更多信息IIS核心无法识别该模块.
查看更多信息»
提前致谢,
霍华德霍夫曼
面对同样的问题,修复很容易.
1)打开visual studio 2010命令提示符.
2)运行命令 aspnet_regiis.exe -i
我们在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
布尔设置 - UseIntegrated
让应用程序指定要初始化的Appof类型.显然,IIS不会将App Pool类型转发给ASP.NET,所以我的建议就是解决这个问题.
TemplatedMailWebEvent提供程序比SimpleMailWebEventProvider更加用户友好,我们希望MS能解决这个问题.
谢谢大家的阅读,
霍华德霍夫曼