19分钟后,viewstate丢失了

时间:2013-10-07 10:01:20

标签: c# asp.net iis-7 viewstate

背景:

  • aspnet C#3.5 web应用程序
  • iis 7
  • 机器密钥已在web.config
  • 中设置
  • 会话到期:web.config使用<sessionState timeout="200" />
  • 200分钟
  • 票据设置方式如下:
new FormsAuthenticationTicket(2, ticket.Name, 
                              DateTime.Now,
                              DateTime.Now.AddMinutes(200), 
                              false, ticket.UserData);

当用户在同一页面停留19-20分钟时,然后进行回发,viewstate似乎丢失(ViewState[xxx]中存储的数据为空)。

我认为viewstate不会丢失,因为它会在每次回发时发送回服务器?

2 个答案:

答案 0 :(得分:3)

我的猜测是,这是IIS和ASP.NET中的设置组合。

因此,您在IIS中启用了应用程序池在空闲超时时的回收,这基本上意味着如果在20分钟内没有请求,则应用程序池将停止。

我还想到你将MAchineKey设置为Auto,这意味着每次AppPool启动它都会生成一个新密钥,这可能意味着,因为你的ViewState可能正在使用加密,然后在20分钟后它无法解密,因为密钥根据应用程序池回收而更改。

您应该查看事件查看器,看看是否有关于WAS回收应用程序池的消息以及无效的视图状态错误。 在IIS中,转到“应用程序池”页面并单击“高级设置”,您可以看到默认实际上是20分钟的空闲超时时间。

Here you can see the defaults which is 20 minutes

答案 1 :(得分:-1)

您是否启用了ASP状态服务器?可能在web.config中。 检查超时。