代码之家  ›  专栏  ›  技术社区  ›  Howard Hoffman

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

  •  1
  • Howard Hoffman  · 技术社区  · 14 年前

    我们有一个在IIS7/Windows 2008上运行的ASP.NET(3.5sp1)应用程序。我们在Global.asax中捕获应用程序启动和应用程序结束事件。我们还在应用程序中托管WCF服务,并通过ServiceHostFactory捕获OnOpening和OnClosing事件。因此,我们认为,任何应用程序的启动和停止,无论是预定的还是非预定的,我们都会得到保证的通知。

    几天前,我们的应用程序在“已启动”或“正在运行”状态下捕获到应用程序启动事件。

    没有应用程序结束事件先于应用程序开始(如果考虑到比赛条件,甚至在几分钟后也没有)。

    我们的第一个想法是,我们的应用程序实际上是无声地崩溃和终止的。实际上,发生的是一个新的应用程序域旋转到服务入站请求,但是现有的应用程序域的后台线程(我们在线程池线程中做很多事情)仍然运行了几天——直到我用iISRead杀死它们。

    猜测是应用程序没有启动,因为原始的应用程序域没有结束。。。但是为什么应用程序启动了?

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

    提前谢谢你,

    霍华德·霍夫曼

    1 回复  |  直到 14 年前
        1
  •  0
  •   Lex Li    14 年前

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

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

    对于ASP.NET开发人员,建议进一步了解IIS。

    推荐文章