动态添加控件到ASP.NET - 20分钟后不保留viewstate

时间:2010-12-03 17:24:52

标签: asp.net iis-6 timeout viewstate

我们有一个ASP.net表单[IIS 6上的.NET 3.5],可以动态加载控件。只要回发发生在20分钟内,我们就可以在视图状态中保留这些值。数据库也会正确更新。一切都按预期工作。

但是,如果用户填写表单需要超过20分钟,则控件在回发期间不再保留其值。会话值完好无损,用户身份验证也完好无损。我们尝试了几件事

1)为web.config文件添加了机器密钥 - 我们有2个由Windows负载均衡器负载平衡的Web服务器

2)我们确认用户被路由到同一台服务器 - 因为会话是粘性的

3)在IIS 6.0中将会话超时时间增加到60分钟

4)将连接池的空闲超时时间增加到60分钟

5)将表单身份验证票证超时更改为60分钟

任何帮助都将不胜感激。

-Thanks

3 个答案:

答案 0 :(得分:4)

20分钟是应用程序池回收的默认超时。在服务器上运行IIS管理器,进入“应用程序池”属性,然后取消选中“回收工作进程(以分钟为单位)”,或将其设置为60。

答案 1 :(得分:1)

“粘性”会话并不意味着“总是去同一台服务器”。这只是一个建议。当然,这是一个强大的,但仍然只是一个建议。负载均衡器通过保留客户端及其目标服务器的内存缓存来工作。此内存有限,并定期进行垃圾回收。这意味着,您可能会根据请求之间的时间量在服务器之间进行跳转。

如果您在内存会话数据中使用负载平衡计算机,则必须1.停止使用会话或将后备存储更改为会话状态服务器或SQL Server。这是确保会话数据实际可用于所有目标服务器的唯一方法。

您是如何确定会话和用户值仍然完好无损的?你只是猜测你是关于他们要去哪个服务器吗?

要完全消除负载平衡作为罪魁祸首,请关闭除一台机器之外的所有机器。

答案 2 :(得分:0)

问题可能出在<sessionPageState historySize="9" />配置中。它控制在Session中存储多少“回发结果”。每个回发都将它的ViewState记录到Session [“__ VIEWSTATEQUEUE”]中队列的末尾。