关于SessionState与序列化的一点教训
来源:互联网 发布:ubuntu需求 编辑:程序博客网 时间:2024/05/14 20:15
很简单的东西,因为在学习中遇到了,所以记录下来.
事情的起因是,我在做一个购物蓝时,将一个自定义的类CartManager整个放进Session中,它的部分代码如下,其实就是有一个Private的ArrayList成员_cart用来放CartInfo类实例,而CartInfo类又包括一个成员ProductInfo _product和一个double _moneny...并不复杂.但是我都没有弄任何Serializable的东西,于是...
本机调试没问题,放到服务器上却发现这个购物车表现非常怪异,时好时坏,总觉得好象Session里的东西乱得很,有时能存进去有时存不进?
比较了本机与服务器的环境,我知道问题肯定与SessionState有关.因为服务器用了Web Farm(并且将最大工作进程数设置成了10).
一般我们在做一个WEB Application的时候,它的SessionState的Mode=InProc的,可参见web.config文件中的配置
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
在服务器上,因为存在多个工作进程,所以需要将它的写法改成 mode=StateServer了,否则就会造成前面所说的Session中的值不确定的现象.但是,如果简单地这样改一下,系统又报错说对于以StateServer 或者 SqlServer两种方式保存会话状态,要求对象是可序列化的(大意如此)...所以我们还需要再将对象做一下可序列化声明.
如果要保存的对象很简单,都是由基本类型组成的,就只需要声明一下属性即可,如:
public class ProductInfo {
private string f_SysID;
public string SysID {
get {
return this.f_SysID;
}
set {
this.f_SysID = value;
}
}
对于本例中,CartInfo 与 ProductInfo两个类,可以这样声明一下.只是CartManager就稍多几句话,如下:
public class CartManager : ISerializable
{
private ArrayList _cart=new ArrayList();
public CartManager()
{
}
protected CartManager(SerializationInfo info, StreamingContext context)
{
this._cart=(ArrayList)info.GetValue("_cart",typeof(ArrayList));
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("_cart",this._cart);
}
private CartInfo findCartInfo(string sid)
{
foreach(CartInfo ci in this._cart)
{
if( ci.Product.SysID.Equals(sid) ) return ci;
}
return null;
}
public ArrayList getCart()
{
return this._cart;
}
这样实现了整个CartManager--CartInfo--ProductInfo的可序列化声明,于是就一切正常了...
- 关于SessionState与序列化的一点教训
- (asp.net)关于SessionState与序列化的一点教训
- 关于SessionState与序列化的一点教训
- 关于序列化的一点补充
- WebFarm与SessionState的保存
- 关于SessionState
- 学习xhtml的一点教训
- 玩编译的一点教训
- 写OGRE的一点教训
- 关于序列化以及NonSerializedAttribute的一点总结
- 一点教训
- 序列化的一点了解
- 关于sessionState各种模式的问与答[转载英文帖FAQ],侧重与各种实例与应用。
- 面试的一点心得,失败的教训
- 关于2017电子设计国赛四旋翼飞行器题目的经验总结与教训
- 今天调PHP的一点小教训
- 学CodeSmith得到的一点教训
- 获取移动硬盘空间状况的一点教训
- openscale加载wms服务的参数,geoserver只认EPSG:4326??
- 怎么使用Spring发送邮件
- linux下用mutt发送邮件
- html
- 使用Hessian获取客户端IP等信息 [转]
- 关于SessionState与序列化的一点教训
- 做互联网教育?先想清楚这三大矛盾!
- 客户端与服务器SSL双向认证(客户端:java-服务端:java)
- Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务 .
- 软件大赛excel转换
- 黑马程序员_面向对象(上)
- fread函数和fwrite函数
- UVa 111 - History Grading 最长递增子序列 LIS
- 六年后我将收获怎样一个孩子?——开学一月摧垮家长坚持六年的教育观