2010-11-09 102 views
0

只是像往常一样“再次使用会话......”但面临奇怪的情况。 .net 3.5asp.net会话问题:重定向后变量丢失

  1. 将对象插入到会话变量中。
  2. 就在下一行 - 已成功检索到。
  3. 重定向,检索 - 变量是默认值,但没有调用对象构造函数。

我就不一一介绍了我如何度过几个小时的调试,可以重置变量......因为那些小时后,我刚换的StateServer模式是InProc ...任何操作和它来LIFE)

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

发生了什么事)

编辑:?

经过在国家的服务器端口的防火墙流量 - ASP没有发送有页面请求处理过程中任何事情。这就是为什么我可以检索下一行的变量。但是为什么他稍后将默认对象写入状态服务器呢?

回答

0

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

0

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

这个问题可以与过载

Response.Redirect("~/default.aspx", false); 

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

+0

1.我正在使用这种方法2.变量已设定 - 我在线后取回它InProc如何帮助这里?) – 2010-11-09 23:03:20

0

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

如果您正在使用inProc会话状态,但您的应用程序池进程模型使用多个工作进程,则会出现此类问题。

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

+0

这只是一个本地调试。默认调试环境。 – 2010-11-10 07:54:45

+0

我的意思是你在用什么服务器?开发服务器或IIS?如果您使用在IIS服务器上发布的开发服务器 – 2010-11-10 11:08:18

+0

,请尝试使用IIS - 同样的问题。 – 2010-11-11 13:24:52