如何找出 ASP.NET Web 应用程序重新启动的原因

Ste*_*ack 3 asp.net iis web-applications application-restart

在我的 Web 应用程序Application.End中,由于某种原因在每次请求后都会调用并重新启动应用程序。当我在中设置断点时,Applicaion_End我没有得到有用的堆栈跟踪。此外,事件查看器中没有条目。根据 MSDN,以下可能会导致应用程序重新启动:

  • 从应用程序的 Bin 文件夹中添加、修改或删除程序集。
  • 从 App_GlobalResources 或 App_LocalResources 文件夹中添加、修改或删除本地化资源。
  • 添加、修改或删除应用程序的 Global.asax 文件。
  • 在 App_Code 目录中添加、修改或删除源代码文件。
  • 添加、修改或删除配置文件配置。
  • 在 App_WebReferences 目录中添加、修改或删除 Web 服务引用。
  • 添加、修改或删除应用程序的 Web.config 文件。

我猜我的代码更改了一些触发应用程序重新启动的文件。有什么办法可以找出究竟是什么原因导致应用程序重新启动?

编辑:我现在通过逐步执行代码并在资源管理器中查看时间戳来解决我的问题。在应用程序启动时,我正在从导致创建和删除 .ldb 文件的访问数据库中读取一个值。然而,这个问题还没有得到解答。是否有任何日志记录导致应用程序重新启动的此类事件?

PHe*_*erg 5

Tess Ferrandez 写了一篇很好的博客文章,介绍了如何确定 App Domain 回收的原因。苔丝对如何记录重启事件有这样的说法:

您如何确定导致 appdomain 重新启动的原因?在 ASP.NET 2.0 中,您可以使用内置的运行状况监视事件来记录应用程序重新启动以及重新启动的原因。为此,请更改 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 目录中的主 web.config 文件并添加以下部分

<healthMonitoring>
  <rules>
    <add name="Application Lifetime Events Default" 
         eventName="Application Lifetime Events"
         provider="EventLogProvider" profile="Default" minInstances="1"
         maxLimit="Infinite" minInterval="00:01:00" custom="" />
Run Code Online (Sandbox Code Playgroud)

要打开 IIS6 的日志记录,您可以使用:

cscript adsutil.vbs Set w3svc/AppPools/DefaultAppPool/LogEventOnRecycle 255
Run Code Online (Sandbox Code Playgroud)

对于 IIS7,您可以从 IIS 管理器 - 应用程序池 - 高级设置进行控制。