asp.net会话问题:重定向后变量丢弃

时间:2010-11-09 22:38:38

标签: asp.net session

像往常一样“再次使用会话”......但面临陌生的情况。 .net 3.5

  1. 将对象插入会话变量。
  2. 就在下一行 - 成功检索它。
  3. 重定向,检索 - 变量是默认值,但未调用对象构造函数。
  4. 我不会描述我如何花几个小时来调试任何可以重置变量的操作......因为在那几个小时之后我只是将StateServer模式更改为InProc ......并且IT CAME TO LIFE)

    为什么呢?如果我试图将一些非序列化的东西插入到stateserver中,我曾经看到一个异常 - 但是我插入并检索了...同样在跟踪中我在会话中看到了相同类型的对象,但是有另一个ID。最后 - 我使用旧的,经过测试的代码(在重定向和会话存储或检索的情况下)但是使用新的对象类型。

    发生了什么事?)

    编辑:

    在状态服务器端口上检查防火墙流量 - asp在页面请求处理期间不发送任何内容。这就是我可以检索变量下一行的原因。但是为什么他以后会将默认对象写入状态服务器?

3 个答案:

答案 0 :(得分:0)

Response.Redirect可能会导致此行为;一旦调用重定向,就会抛出线程中止异常,这可能会阻止设置会话变量。

过载

可以克服这个问题
Response.Redirect("~/default.aspx", false);

此调用不会中止线程,因此会成功设置会话变量。

答案 1 :(得分:0)

您的开发机器的环境是什么? 您的应用程序池流程模型部分,您使用了多少个工作进程?

如果您正在使用inProc会话状态,但您的应用程序池流程模型使用了多个工作进程,那么您将遇到此类问题。

请注意,您的开发计算机上的应用池设置很可能与您的生产计算机不同。因此,在会话状态inproc和会话状态服务之间进行更改具有重大意义。

答案 2 :(得分:0)

在序列化对象层次结构的底层类中,创建了一个未标记为Serializable的类。似乎如果不可序列化的对象嵌套到子类中,asp就不会抛出此类异常。太愚蠢了(