【问题标题】:Object gets stored in session, but while retrieving it is null对象存储在会话中,但在检索时为空
【发布时间】:2010-12-17 19:04:29
【问题描述】:

在页面加载时,我正在填充我自己的对象,存储在会话中并且它正在被存储, 当我调试时,我可以看到该对象存储在会话中,但是当我读取该会话变量时..它为空,

令人惊讶的是,我能够使用其他会话变量,

但是,当我的 sessionstate = "InProc"... 时,我可以获取会话变量...而当 sessionstate='StateServer' 或 sessionstate='SQLServer' 时,我将其设置为 null

我保持会话 TimeOut="20", 在页面上我添加了 EnableSessionState="True"

请帮忙, - Prashant C

【问题讨论】:

  • 你能发布你的代码吗?如果您可以使用其他会话变量,您有什么不同?
  • 将您的类标记为可序列化并实现 IDeserializationCallback support.microsoft.com/kb/312112

标签: c#


【解决方案1】:

您的类型是否实现ISerializable(直接或间接,可能通过继承)? in-proc 和其余最大的区别就是in-proc 不序列化,所以首先要看的是序列化。

这听起来确实很奇怪——如果它是“关闭”的,我希望得到一个异常或一个未初始化的对象——而不是一个空值。也许是一个愚蠢的问题,但传入的请求肯定有所有正确的标头/cookie?即它仍然知道它在哪个会话中?

解释一下,如果您的类型 既不 实现 ISerializable 也不[Serializable] 我预计会有例外;你已经添加了[Serializable],但事实上它还没有出错,这让我觉得其中有一些ISerializable

【讨论】:

  • 大家好,问题已解决...我犯了一个愚蠢的错误...我忘记将 [serializable] 添加到包装类中包含的数据成员的类定义中.. [seriablizable] 类class_first { ... 第二类 = new class_second(); ... } 我只将 class_first 设置为 [serializable] 而不是 class_second ...由于错误处理模块,我没有发现任何错误。但我希望这对其他人有所帮助,我非常感谢您的时间和帮助,干杯!! - Prashant C
【解决方案2】:

sessionstate='StateServer' 或 sessionstate='SQLServer' 要求您的对象是可序列化的。

【讨论】:

  • 感谢您的回复。。我已经添加了。。[Serializable] public class MyClass { ... } 还是一样的效果...还有其他方法吗?
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 2014-09-10
  • 2017-12-06
  • 2012-01-26
相关资源
最近更新 更多