IIS池回收,池重新启动,应用程序重新启动,web.config更新-全局asax
本文关键字:重新启动 更新 全局 asax config 应用程序 IIS web | 更新日期: 2023-09-27 18:19:35
我有在IIS 7下运行的MVC3 web应用程序。在global.asax中初始化期间,应用程序扫描BuildManager.GetReferencedAssemblies()返回的所有程序集,以及这些程序集中的所有类型(Assembly.GetTypes()),以便执行初始化操作。
应用程序不时地停止正常工作——它的行为就好像初始化从未发生过,或者在启动过程中省略了某些类型。一旦应用程序进入这种失败状态(我认为这发生在池被回收之后),它就会一直保持这种状态,直到重新启动
- 手动更新Web.Config(添加一些空格)
- 在IIS管理器中手动重新启动应用程序
- 在IIS管理器中手动停止和启动应用程序池
- 自动池回收
我注意到1。总是有帮助的,但2,3,4的工作是不确定的——至少就我所能说的,因为问题的性质不是确定的——只有在一些计划的回收之后,应用程序才会崩溃。从global.asax代码和访问加载的程序集的角度来看,1和2,3,4之间有什么区别?
哦,如果应用程序更改了任何内容,它将作为子应用程序(IIS站点树中的子文件夹)运行。
我相信您的问题可以通过保存一些状态信息来解决,这样应用程序就可以知道它的启动是否成功。
每当应用程序检查有什么东西初始化不正确时,它应该重新初始化它,或者抛出异常并重新启动应用程序。
给你一个解决方案真的很难,但总结一下你可以做到这一点:
- 轨道初始化
- 不要让应用程序在意外状态下运行
- 仔细检查代码中的某个非托管资源是否未被释放(可能是文件流、数据库连接…?)
- 日志记录、记录
直接回答您的问题:
- 回收应用程序池。
- HttpApplication(Global.asax)触发应用程序初始化事件(Start事件)
- 回收应用程序池。
- HttpApplication(Global.asax)触发应用程序初始化事件(Start事件)
- 基本上,停止所有传入请求的应用程序,直到您再次启动它。基本上,一个硬应用程序池回收。
- HttpApplication(Global.asax)触发应用程序初始化事件(Start事件)
- 回收应用程序池。
- HttpApplication(Global.asax)触发应用程序初始化事件(Start事件)
基本上,这些操作中的任何一个都会产生相同的结果。
您是否尝试过执行IIS重置-iisreset /restart
命令-?这应该会释放任何锁定的资源,并停止任何不需要的循环、线程或任何破坏应用程序的事情。