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

发布于 2024-12-23 08:33:46 字数 736 浏览 0 评论 0原文

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

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

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

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

In my web application Application.End is called after every request for some reason and the application is restarted. When I set a breakpoint in Applicaion_End I don't get a useful stack trace. Furthermore, there are no entries in Event Viewer. According to MSDN, the following could cause an application restart:

  • Adding, modifying, or deleting assemblies from the application's Bin
    folder.
  • Adding, modifying, or deleting localization resources from the
    App_GlobalResources or App_LocalResources folders.
  • Adding, modifying, or deleting the application's Global.asax file.
  • Adding, modifying, or deleting source code files in the App_Code
    directory.
  • Adding, modifying, or deleting Profile configuration.
  • Adding, modifying, or deleting Web service references in the
    App_WebReferences directory.
  • Adding, modifying, or deleting the application's Web.config file.

I guess that my code changes some file which triggers an application restart. Is there any way to find out what exactly causes the application restarts?

Edit: I solved my problem now by stepping through the code and watching the timestamps in Explorer. On application startup I'm reading a value from an access database which causes a .ldb file to be created and deleted. However, this question has not been answered yet. Is there any log that keeps record of such events that cause the application to be restarted?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无声静候 2024-12-30 08:33:46

Tess Ferrandez 写了一篇很好的 关于如何确定应用程序域回收原因的博客文章。关于如何记录重启事件,Tess 有这样的说法:

如何确定导致应用程序域重新启动的原因?在 ASP.NET 中
在 2.0 版本中,您可以使用内置的运行状况监控事件来记录应用程序重新启动以及重新启动的原因。要做的事
您可以更改主 web.config 文件中的
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\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 管理器 - 应用程序池 - 高级设置中控制它。

Tess Ferrandez wrote a good blog post on how to determine the reason for App Domain recycling. Tess has this to say on how to log the restart event:

How do you determine what caused an appdomain restart? In ASP.NET
2.0 you can use the built in Health Monitoring Events to log application restarts along with the reason for the restart. To do
this you change the master web.config file in the
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG directory and add
the following section

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

To turn on logging for IIS6 you can use:

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

For IIS7 you can control it from the IIS manager - Application pools - Advanced Settings.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文