【发布时间】:2017-09-25 20:14:54
【问题描述】:
我有一个 ASP.net 网站的多个版本,除了最近开始突然停止的最新版本外,所有版本都运行良好。每个版本在不同的应用程序池中运行。我们的调查结果如下:
- Application_End 事件在启动 Web 应用程序几分钟后被触发。但是,此后不会触发 Application_Start。
- 应用程序停止后,大多数页面都没有样式,因为我们的样式是使用“BundleTable”捆绑的。所有捆绑包都返回 404 错误,但依赖于 Web 服务的登录过程工作正常,并将我移动到主页(由于 404 响应而没有样式)
- 请求任何物理资源 (image/js/css/svc) 都可以正常工作
- Application_End 事件被触发后,与该应用程序池相关的 w3wp 进程保持运行。用任务管理器杀死它并没有改变。它将重新启动而不会导致 application_start 被触发
- 停止/重新启动/回收 IIS/池不会导致 Application_Start 被触发(我正在使用自定义日志记录进行检查)。删除 asp 临时文件有时有效,但并非每次都有效。现在我已经尝试了一切,但无法让它重新开始!
- 列表项
我使用的是 Windows Server 2012 64x,带有 IIS 8.5 和 .net V4.5。任何提示表示赞赏
更新 1: 这是错误页面的snapshot。
更新 2: 在进行了一些测试并在这里和那里添加了更多日志之后,我可以用更简单的方式总结这个问题: 首先,仅在发布我的网站并将所有输出 DLL 合并到单个程序集中时启用“发布期间预编译”选项的情况下才会显示此问题。 使用上述配置发布后,第一个页面请求会触发Application_Start事件,这是正常的,我在这个事件中的主要代码是注册所有的CSS & JS bundle,并配置URL路由。该应用程序将正常工作约。 30 分钟,然后 Application_End 将被触发(以“HostingEnvironment 启动关闭”关闭原因),但 Application_Start 不会再次被触发!。奇怪的是应用程序将继续为后续请求提供服务(例如:连接到数据库、进行日志记录、验证用户、提供 WCF 服务请求......)但是在 Application_Start 中注册的所有包和 URL 路由都丢失了。另一个提示,在触发 Application_End 后,在 global.asax 文件中处理的一般错误(例如:404)没有得到处理!似乎应用程序只是忽略或忘记再次处理此文件!
【问题讨论】:
-
你检查分配的端口和绑定了吗?
-
已检查事件查看器?
-
@RuardvanElburg 是的。相同绑定下的所有其他应用程序都运行良好
-
@Boney 是的。什么都没有,没有警告也没有错误
-
您的应用程序池是否在用户“ApplicationPoolIdentity”下运行?