【问题标题】:viewstate is lost after 19+ minutes超过 19 分钟后视图状态丢失
【发布时间】:2013-10-07 10:01:19
【问题描述】:

背景:

  • aspnet C# 3.5 网络应用程序
  • 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[xxx] 中存储的数据为空)。

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

【问题讨论】:

  • 会话过期:在 web.config 中使用 200 分钟 <sessionState timeout="200" /> ,肯定会在 200 分钟后超时吗?
  • app-pool 的回收策略是什么?有没有可能是20分钟?还是固定数量的请求,即通常在大约 20 分钟内处理的数量?
  • 是的,200 分钟(200 分钟)。
  • 池每天 00:00 回收。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • Idle Time-out 是 200。在 web.config 中机器密钥未设置为自动。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多