【问题标题】:How to Determine ASP.NET Application Domain Lifetime如何确定 ASP.NET 应用程序域生命周期
【发布时间】:2010-09-23 04:00:36
【问题描述】:

我们有一个收集计数器统计信息的应用程序,我们希望在执行iisreset 命令后重置这些值,仅此而已。

微软说Application_Start 是:

当第一个资源(例如 作为页面)在 ASP.NET 应用程序中 被要求。 Application_Start 方法在期间只被调用一次 应用程序的生命周期。你 可以使用此方法进行启动 诸如将数据加载到 缓存和初始化静态值。

这就是我们目前的做法:

protected void Application_Start(object sender, EventArgs e)
{
    _counters.Get<AutoCounter>("TAS:RequestCount").Reset();
    _counters.Get<AutoCounter>("TAS:RequestTime").Reset();
    _counters.Get<AutoCounter>("TAS:TimeBetweenErrors").Reset();
    _counters.Get<AutoCounter>("TAS:ErrorCount").Reset();
}

但是,它们会以意想不到的间隔重置。什么决定了应用程序域的生命周期何时结束以及在下一个请求时调用此方法?

【问题讨论】:

  • 是什么让您认为间隔是任意的而不是意外的?
  • @Conrad,任意可能不是正确使用的词 - 我将其更改为您的建议。谢谢!

标签: asp.net iis global-asax


【解决方案1】:

Web 应用程序重新启动的原因有很多。这个article 包括以下部分列表。

  • web.config 已编辑

  • machine.config 已编辑

  • global.asax 已编辑

  • bin 中的文件已更改
    Web 应用程序的目录,或其中之一
    bin 的子目录

  • 创建、重命名目录或
    在网络应用目录中删除

  • 一个 ASP.NET 文件(aspx、asmx 等)是 已编辑(因此重新编译)
    超过 20 次,默认设置在 机器配置为元素
    命名为 numRecompilesBeforeApprestart

  • 通过各种设置

    中的属性 machine.config 中的元素,其中 影响
    的重启/关机 工作进程本身。在 Windows 上
    2003,不使用IIS5隔离时
    模式(默认不使用), 这些元素是
    忽略,取而代之的是
    中的设置 IIS 管理器中的应用程序池是 用过

我的猜测是您的方法很好,但现在您真正想知道的是导致重启的原因以及您是否应该感到震惊。

【讨论】:

  • 感谢您的建议。我可以保证没有任何配置文件被编辑,因此很可能是 IIS 设置导致意外重启。
【解决方案2】:

在 IIS 6.0 中,应用程序池性能选项卡允许您在指定的空闲时间后关闭 IIS 工作进程。这是默认启用的,设置为 20 分钟。

这可能是触发了意外的 application_start 事件的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多