我认为应用程序状态和会话状态是两回事。
如果我可以设置会话状态的到期时间,我可以在web.config中对应用程序状态执行相同的操作吗?
我只想在5分钟后阻止我的应用程序重建。
我不确切知道会发生什么。首次访问网站时,该网站需要10秒钟才能显示。如果我在5分钟之前返回网站,该网站会立即显示。如果超过5分钟不活动,当我再次访问该站点时,该站点需要10秒钟。我想这是应用程序状态谁过期了?
答案 0 :(得分:2)
我知道让网站保持活力的最简单方法是确保流量始终通过。如果您有权访问预定的作业运行者,请每隔一两分钟对一个虚拟的aspx页面执行ping操作 - 这样,您的应用程序应无限期运行。
如果没有,有一些欺骗系统的技术。您可以构建一个缓存项,并在该缓存项到期时创建另一个缓存项。这将每隔X分钟持续运行代码,这将使应用程序保持活跃状态。这个问题是,如果应用程序曾经死亡(服务器重启,IIS重启等),应用程序将会死亡,直到有人提出真正的请求,此时它将无限期地保持活着。
此技术有时用于模拟ASP.NET中的任务调度程序。请记住,这并不完美。
编辑:为了澄清,您不仅要创建一个新的缓存项,而是实际向页面发出请求,然后该页面将创建缓存项。这可以确保通过IIS进行另一个请求,从而运行整个生命周期,使应用程序保持活动状态。
即使您将会话超时设置为高,也无法保证它会保持不变。我已经与托管公司打过交道,这些托管公司将在几分钟不活动后回收您的应用程序池,从而杀死您可能已打开的任何会话。他们并不关心您可能会打开会话 - 他们只是试图挤出他们可以从服务器中取出的每个CPU周期。因此,如果您使用的是共享主机,您可能需要牢记这一点 - 您可能无法控制它们杀死您应用的频率。
答案 1 :(得分:0)
应用程序状态在创建第一个会话时启动,并在最后一个会话到期后自动结束。只要您继续访问该网站,该应用程序将保持活动状态。
我不知道你的应用程序“重建”是什么意思。更改任何相关文件(即具有可编译代码的文件)将导致应用程序重新编译(如果您有Web目录)或重新加载(如果您有Web应用程序)。此操作将始终结束所有会话并结束应用程序。
答案 2 :(得分:0)
不确定它是否仍然存在。
问题与SessionState或ApplicationState没有关联。
为避免您的网站反应迟钝,您必须激活IIS的 AlwaysRunning 模式 为此,请在下一步添加到web.config
<applicationPools>
<add name="MyAppWorkerProcess" startMode="AlwaysRunning" />
</applicationPools>
答案 3 :(得分:-2)
您可以在配置文件中配置会话状态以防止此过期。 例如:
<sessionState
mode="SQLServer"
sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
cookieless="false"
timeout="20"
/>