为什么IIS“启动”仍在运行的应用程序?

时间:2010-07-22 01:15:19

标签: asp.net iis-7 appdomain application-start application-end

我们在IIS7 / Windows 2008上运行了一个ASP.NET(3.5 SP1)应用程序。我们在Global.asax中捕获Application_Start和Application_End事件。我们还在应用程序中托管WCF服务,并通过ServiceHostFactory捕获OnOpening和OnClosing事件。因此,我们认为,我们保证通知任何应用程序启动和停止,计划或未计划。

几天前,我们的应用程序在处于“已启动”/“运行”状态时捕获了Application_Start事件。

在Application_Start之前没有Application_End事件(如果考虑竞争条件,甚至几分钟后也会跟随它)。

我们首先想到的是我们的应用程序实际上是默默地崩溃并终止。实际上发生的事情是一个新的App Domain转向服务入站请求,但是现有App Domain的后台线程(我们在ThreadPool线程中做了很多东西)仍然运行了几天 - 直到我用IISRESET杀死它们。

猜测是Application_End没有触发,因为原来的AppDomain没有结束......但是为什么Application_Start会触发?

查找描述此半关闭+ AppDomainStartup机制如何在ASP.NET中工作的提示或文档。

提前致谢,

霍华德霍夫曼

1 个答案:

答案 0 :(得分:0)

请了解可能导致此类情况的应用程序池回收。当IIS确定要回收池时,它只是首先初始化一个新的工作进程(将依次调用Application_Start),然后关闭旧的(Application_End)。

我建议您在日志中添加一些带有进程ID的应用程序级别日志记录,以便更好地了解我的上述分析是否正确。

对于ASP.NET开发人员,建议您了解有关IIS的更多信息。