注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 CCIE-Lab考试将新增10分钟..
 帮助

当会话状态模式为“StateServer”或“SQLServer”时,不允许使用无法序列化的对象或 MarshalByRef 对象


2007-07-13 19:10:48
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lcring.blog.51cto.com/195827/33976
  当在ASP.Net的web.config中,将SessionState的mode定义成StateServer或者SQLServer,然后在用户登录过程中保存一个用户对象objUserData,发生以下错误提示:

“/WebFramework.Web”应用程序中的服务器错误。


无法序列化会话状态。请注意,当会话状态模式为“StateServer”或“SQLServer”时,不允许使用无法序列化的对象或 MarshalByRef 对象。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: 无法序列化会话状态。请注意,当会话状态模式为“StateServer”或“SQLServer”时,不允许使用无法序列化的对象或 MarshalByRef 对象。



  我从网上查找相关资料,找到了问题的原因:
  在StateServer或者SQLServer模式的时候保存在Session里面的对象必须支持序列化!如果是内置的类创建的对象,则必须是支持序列化的对象;如果是自己定义的类创建,则可以在定义该类的时候标识如下:
   [Serializable]   
       public      class      YourClass   
   {   
            //class      code
       }
  [Serializable] 标识该类创建的对象是可以序列化的。
  于是,我在UserData类的定义前加上这个标识,问题解决!
  至于,什么是序列化?为什么Session在这两种状态下必须保存序列化对象?还有,什么叫MarshalByRef 对象?有待继续研究。

本文出自 “李春锐的技术博客” 博客,请务必保留此出处http://lcring.blog.51cto.com/195827/33976





    文章评论
 
2007-07-13 21:31:01
哈,博主搬过来啦,果然有许多可以学习的地方哪,这么多的解决办法

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: