1

我们有一个在 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 中如何工作的提示或文档。

提前致谢,

霍华德霍夫曼

4

1 回答 1

0

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

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

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

于 2010-08-08T03:06:05.830 回答