ASP.NET存储状态的一个问题及解决

通常,ASP.NET存储会话状态有三种方式——InProc、StateServer和SQLServer。一般最常用的是第一种,在这种情况下,可以用类似这样的语法来存储会话状态:Session["key"] = val。其中val可以使任何类型的对象。  

但如果使用StateServer或SQLServer,则要求val的类型必须是一个可序列化类型,因为ASP.NET应用在于状态服务器之间交换数据时,需要对对象进行序列化。如果val不可序列化(有私有域/属性并且没有指定自定义序列化特性),则会在运行时出现如下异常:  

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

--------------------------------------------------------------------------------

无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。   

解决方法有这样几种:  

1 尽量使用基本类型的对象来存放数据  

2 自定义类型只使用公有域/属性  

3 为自定义类型实现序列化特性  

……  

几种方法优劣暂不作说明。我偷懒用了第一种。

时间: 2025-01-21 17:42:16

ASP.NET存储状态的一个问题及解决的相关文章

Web Service中保持ASP.net的状态

asp.net|web 简介      网络程序开发者们遇到的最普遍的问题就是如何在无状态的基于HTTP协议的交互中保持状态信息.有许多聪明的办法可以解决HTTP协议的无状态问题,例如对每个请求重复发送应用程序数据包.使用HTTP认证机制来将请求映射到特定的用户.使用Cookie来存储一系列请求的状态等.在ASP.net技术中提供了一个非常有效的方案来保持状态,该方案隐藏了所有高难度的,具有挑战性的工作的细节,用户只需简单地使用System.Web.SessionState.HttpSess

ASP.NET 的状态管理

asp.net web Form 网页是基于HTTP的,它们没有状态, 这意味着它们不知道所有的请求是否来自同一台客户端计算机,网页是受到了破坏,以及是否得到了刷新,这样就可能造成信息的丢失. 于是, 状态管理就成了开发网络应用程序的一个实实在在的问题.    在ASP中能够通过Cookie .查询字符串. 应用程序.会话(Session) 等轻易解决这些问题.现在在ASP.NET环境中,我们依然可以使用这些功能,并且功能更加强大.  状态管理分为服务端和客户端两种情况, 这里只是介绍 服务端状

亲密接触ASP.Net(15) 状态保存

ASP.Net中状态保存 在ASP保存一些共享.个人状态,使用的是Application.Session.Cookie这三种.呵呵.在ASP.Net中M$除了继承Application等外,又给我们新的一种状态变量信息State,它是用来保存WEB控件的状态的变量,很新鲜吧,一定要快点知道啦:) 不好意思,飞刀还是从原始一步步来说吧.先从Application讲起.(台下一片吼声),没有办法,为了有个阶梯性,还是不应当过早接触新东东啦:) Application 在ASP.Net中Applica

在asp网站上添加了一个右侧悬浮客服代码,添加后网页上下段之间有个间隙,位置异常,请大家指点,谢谢!

问题描述 在asp网站上添加了一个右侧悬浮客服代码,添加后网页上下段之间有个间隙,位置异常,请大家指点,谢谢! 我在我们网站上添加了悬浮于右侧中部的客服代码,网站是asp代码制作的,该客服代码是由3个文件组成,分别是(1)ggimages文件夹,主要放置客服广告的图片;(2)ggjs文件夹,主要放置js文件,内放置一个top.js文件;(3)网站根目录下放置一个gg.asp的文件,是客服代码的主程序. 存在问题:我在index主页底部引用gg.asp文件,代码如下: <!--#include f

asp.net 二进制数据 从一个界面传到另一个界面

问题描述 asp.net 二进制数据 从一个界面传到另一个界面 asp.net 二进制数据 从一个界面传到另一个界面,并在在第二个界面进行处理 解决方案 二进制数据可以编码为base64.十六进制字面的hex字符串等存储,可以通过session传递,也可以通过web socket 解决方案二: 具体一点 a b 页面

解决ASP中http状态跳转返回错误页的问题_应用技巧

IIS默认的错误页是很不友好的,很多人看到默认的错误页时都会说:网站打不开了!白白损失了这部分流量.而如果错误页直接跳转到首页又对搜索引擎很不友好,搞不好首页还会被封掉.所以根据情况,有两个方法解决这个问题:  如果是博客等内容型的网站,可以返回一个带有404错误的搜索框让访客搜索,若是电子商务型网站,则可以返回一个带有404错误的进度条进行跳转.这两种方法即照顾了访客又顾及到了SEO. 可以在Google webmaster tools中查看自己网站错误页有多少. 修改默认错误页的方法很简单:

SQL Server中TempDB管理(版本存储区的一个example)

原文:SQL Server中TempDB管理(版本存储区的一个example) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/ http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/12/31/managing-tempdb-in-sql-server-tempdb-basics-version-store-simple-examp

解决ASP中http状态跳转返回错误页的问题

IIS默认的错误页是很不友好的,很多人看到默认的错误页时都会说:网站打不开了!白白损失了这部分流量.而如果错误页直接跳转到首页又对搜索引擎很不友好,搞不好首页还会被封掉.所以根据情况,有两个方法解决这个问题: 如果是博客等内容型的网站,可以返回一个带有404错误的搜索框让访客搜索,若是电子商务型网站,则可以返回一个带有404错误的进度条进行跳转.这两种方法即照顾了访客又顾及到了SEO. 可以在Google webmaster tools中查看自己网站错误页有多少. 修改默认错误页的方法很简单:在

ASP.NET MVC 5 - 添加一个模型

原文:ASP.NET MVC 5 - 添加一个模型 在本节中,您将添加一些类,这些类用于管理数据库中的电影.这些类是ASP.NET MVC 应用程序中的"模型(Model)". 您将使用.NET Framework 数据访问技术Entity Framework,来定义和使用这些模型类.Entity Framework(通常称为 EF) 是支持代码优先 (Code First) 的开发模式.代码优先允许您通过编写简单的类来创建对象模型.(相对于"原始的CLR objects&q