4

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

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

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

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

4

1 回答 1

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="" />

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

cscript adsutil.vbs Set w3svc/AppPools/DefaultAppPool/LogEventOnRecycle 255

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

于 2011-12-30T10:26:26.997 回答