2011-12-30 29 views
3

在我的web应用程序Application.End由于某种原因在每次请求后被调用并且应用程序重新启动。当我在Applicaion_End中设置断点时,我没有得到有用的堆栈跟踪。此外,在事件查看器中没有条目。根据MSDN,下面可能会导致重新启动应用程序:如何找出为什么ASP.NET web应用程序正在重新启动

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

我猜我的代码改变了一些触发应用程序重启的文件。有什么方法可以找出应用程序重新启动的具体原因吗?

编辑:我现在通过浏览代码并观察Explorer中的时间戳来解决我的问题。在应用程序启动时,我正在读取访问数据库中的值,这会导致创建和删除.ldb文件。但是,这个问题还没有得到解答。是否有任何记录导致应用程序重新启动的事件记录?

+0

你在iis上工作吗?也许这是由应用程序池回收引起的重新启动。 – BigMike 2011-12-30 09:30:20

+2

为什么不按修改日期对文件和文件夹进行排序? – 2011-12-30 09:30:54

+0

@BigMike是的,我在IIS上。我启用了应用程序池回收的所有日志条目,但事件查看器中没有条目,所以我认为这只是应用程序重新启动。此外,Visual Studio Development Server中也会出现同样的情况。 – 2011-12-30 09:34:02

回答

4

Tess Ferrandez在如何确定应用程序域回收的原因方面写了一个很好的blog post。苔丝有如何说明如何记录重新启动事件:

如何确定是什么导致appdomain重新启动?在ASP.NET 2.0中,您可以使用内置的运行状况监视事件记录应用程序重新启动以及重新启动的原因。要做到这 更改主web.config文件中 C:\ WINDOWS \ Microsoft.NET \框架\ 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管理器 - 应用程序池 - 高级设置中对其进行控制。

+0

我不相信您所指的App Pool - Advanced Settings与Health Monitoring相同。这些设置特定于回收事件。它们不涵盖healthMonitoring的eventMappings元素中配置的默认运行状况监视事件的完整色域。据我所知,你应该仍然使用所有版本的.NET和IIS的机器级web.config的healthMonitoring设置。它们更精细,您还可以设置不同的提供程序,例如电子邮件提供程序,事件日志提供程序或SQL提供程序来捕获健康事件。 – 2017-08-01 08:53:03

相关问题