【问题标题】:Asp.net Application State expirationAsp.net 应用程序状态到期
【发布时间】:2012-01-01 17:47:23
【问题描述】:

我认为应用程序状态和会话状态是两个不同的东西。

如果我可以为会话状态设置过期时间,我可以对我的 web.config 中的应用程序状态做同样的事情吗?

我只想阻止我的应用程序在 5 分钟后重建。

我不知道到底会发生什么。首次访问该网站时,该网站需要 10 秒才能出现。如果我在 5 分钟前返回该站点,该站点会立即出现。如果超过 5 分钟不活动,当我再次访问该站点时,该站点需要 10 秒。我猜是应用状态谁过期了?

【问题讨论】:

  • 您的应用程序“5 分钟后重建”是什么意思?请准确解释这是什么意思。

标签: asp.net web-applications web-config


【解决方案1】:

据我所知,让您的网站保持活力的最简单方法是确保始终有流量通过。如果您可以访问计划的作业运行程序,请让它每隔一两分钟 ping 一个虚拟 aspx 页面 - 这样,您的应用程序应该可以无限期地运行。

如果没有,有一些技术可以欺骗系统。您可以构建一个缓存项,并在该缓存项到期时创建另一个缓存项。这将永远保持每 X 分钟运行一次代码,这将使应用程序保持活力。这样做的问题是,如果应用程序确实死了(服务器重新启动、IIS 重新启动等),该应用程序将会死掉,直到有人发出真正的请求,此时它将再次无限期地保持活动状态。

这种技术有时用于模拟 ASP.NET 中的任务调度程序。请记住,它并不完美。

编辑:为了澄清,您不会只是创建一个新的缓存项,您实际上会向一个页面发出请求,然后该页面将依次创建缓存项。这可确保通过 IIS 发出另一个请求,从而运行整个生命周期,使应用保持活动状态。

即使您将会话超时设置得很高,也不能保证它会保持不变。我已经与托管公司打过交道,他们会在您的应用程序池处于不活动状态几分钟后回收,从而终止您可能打开的任何会话。他们不在乎你是否打开了会话——他们只是试图从他们的服务器中挤出每个 CPU 周期。因此,如果您使用的是共享主机,您可能需要牢记这一点 - 您可能无法控制他们杀死您的应用的频率。

【讨论】:

    【解决方案2】:

    应用程序状态在创建第一个会话时开始,并在最后一个会话到期后自动结束。只要您继续访问该网站,该应用程序就会保持活动状态。

    我不知道您所说的“重建”应用程序是什么意思。更改任何相关文件(即具有可编译代码的文件)将导致应用程序重新编译(如果您有 web 目录)或重新加载(如果您有 web 应用程序)。此操作将始终结束所有会话并结束应用程序。

    【讨论】:

    • 好吧,如果您的会话超时时间为 5 分钟,那么在最后一次访问后 5 分钟,会话将过期并且应用程序将卸载。在此之后的第一次新访问时,必须重新加载应用程序,这确实需要一些时间。会话的默认超时为 20 分钟,除非您有理由更改它,否则我建议您不要管它。您是否在 Global.asax.vb(或 .cx)的 Application_Start 事件上执行任何代码?每次应用程序启动时都会执行。另外,您使用的是哪个版本的 IIS?
    • 顺便说一句,你可以在你的 web.config 中控制超时,在 system.web 部分使用 sessionState 标签:
    【解决方案3】:

    不确定它是否仍然真实。

    该问题与 SessionState 或 ApplicationState 无关。

    为避免您的网站反应缓慢,您必须激活 IIS 的 AlwaysRunning 模式 为此,将下一个添加到您的 web.config 中

    <applicationPools> 
        <add name="MyAppWorkerProcess" startMode="AlwaysRunning" /> 
    </applicationPools>
    

    【讨论】:

      【解决方案4】:

      您可以在配置文件中配置会话状态以防止此过期。 例如:

      <sessionState 
                  mode="SQLServer"
                  sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
                  cookieless="false" 
                  timeout="20" 
          />
      

      【讨论】:

      • 问题是总结您的答案并询问应用程序状态:“如果我可以将过期时间设置为会话状态,我可以对我的 web.config 中的应用程序状态执行相同操作吗?”
      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 2010-09-23
      • 2016-07-31
      • 1970-01-01
      • 2011-10-15
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多