我有一个需要在24小时/ 24小时的计算机上运行的ASP.NET MVC网站
我使用session来存储我通过配置文件或外部API获取的变量:
HttpContext.Session["Value"]
在我的web.config文件中,我将会话timeOut设置为最大值:
<system.web>
<sessionState timeout="525600" />
网站需要显示很长时间,当我点击按钮时仍然有会话变量。 (也许1-2天后)
它会那样工作吗? IIS配置中还有什么可做的吗?
我问,因为很难测试它......
答案 0 :(得分:2)
如果您正在使用inproc会话,那么您将需要转到IIS并长时间设置应用程序池回收(或禁用它),与空闲时间相同(将其设置为0以始终运行或在您的网页中实施pinging服务)。
如果将会话变量存储在持久存储(数据库,文件或单独的进程)中,最好的选择是。
你可以通过修改web.config(这是一个示例配置)
来做到这一点<sessionState mode="SQLServer"
regenerateExpiredSessionId="true "
timeout="525600"
sqlConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
stateNetworkTimeout="30"/>
还有一个问题:你为什么要这样做?如果您想长时间保存用户数据,可能需要查看HTML 5 local storage。
第三个选项是服务器是无状态的,所有数据都存储在javascript变量中。 &#34;坏&#34;是你需要发送与每个请求相关的所有内容,好消息是,该页面将会工作&#34;只要浏览器窗口打开。
长时间依赖会话变量可能会导致难以重现的错误和糟糕的用户体验,因为页面在没有明显原因的情况下停止工作。尽量避免它,你只会创造不必要的问题=)。
答案 1 :(得分:1)
您可以将应用程序池设置为alwaysRunning模式和idle timeout 0:
但在部署新应用程序(更改web.config,bin文件夹内容)或重新启动服务器时,应用程序池仍将被回收(并恢复会话)。要解决此问题,请将会话状态模式设置为State Server或SQL Server模式。