2012-01-01 91 views
2

我想应用程序状态和会话状态是两个不同的东西。Asp.net应用程序状态到期

如果我可以设置到会话状态的到期时间,我可以做我的web.config中的应用程序状态相同吗?

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

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

+1

你的意思是你的应用程序“ 5分钟后重建“?请详细解释这意味着什么。 – Oded 2012-01-01 17:52:17

回答

2

我知道让网站保持活跃状态​​的最简单方法是确保流量始终通过。如果您有权访问计划的作业运行者,请每分钟或每两秒钟ping一个虚拟aspx页面 - 这样,您的应用程序应无限期运行。

如果没有,有技巧来欺骗系统。您可以构建缓存项目,并在该缓存项目到期时创建另一个缓存项目。这将永久保持运行代码每X分钟,这将保持应用程序活着。问题是,如果应用程序永远不会死(服务器重启,IIS重启等),那么应用程序将会死机,直到有人发出真正的请求,此时它将再次无限期地保持活动状态。

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

编辑:为了澄清,你不会创建一个新的缓存项目,你实际上向一个页面发出请求,然后创建缓存项目。这可以确保通过IIS进行另一个请求,而IIS则运行整个生命周期,使应用程序保持活跃状态​​。

即使您确实将会话超时设置为高,也不能保证它会保持。我已经处理了托管公司,他们会在几分钟不活动之后回收您的应用程序池,从而导致您可能已经打开的任何会话中断。他们不关心你可能会开放会议 - 他们只是试图挤压每个CPU周期,他们可以从他们的服务器。因此,如果您使用的是共享主机,则可能需要记住这一点 - 您可能无法控制他们多久会杀死您的应用。

0

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

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

+0

我添加了一些解释 – Sebastien 2012-01-01 18:14:39

+0

好吧,如果您的会话超时时间为5分钟,那么在最后一次访问后5分钟,会话将过期,应用程序将卸载。在此之后的第一次新访问中,应用程序必须重新加载并且需要一些时间。会话的默认超时时间为20分钟,除非您有理由更改该时间,否则我会建议保持独立。你是否在Global.asax.vb(或.cx)的Application_Start事件上执行任何代码?每次应用程序启动时都会执行。另外,您使用的是哪个版本的IIS? – 2012-01-01 18:20:15

+0

顺便说一下,你可以使用sessionState标签在system.web节中控制web.config中的超时时间: 2012-01-01 18:24:05

-2

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

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

问题在于你在回答问题并询问应用状态:“如果我可以将到期时间设置为会话状态,我可以在web.config中对应用程序状态执行相同操作吗?“ – 2017-05-03 07:31:14

0

不确定它仍然是实际的。

该问题未与SessionState或ApplicationState关联。

为了避免您的网站的反应速度慢,你必须激活AlwaysRunning您的IIS 的模式,要做到这一点添加到您的web.config下一

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