2020年,你需要一个全网通用的网站平台

(asp.net)关于SessionState与序列化的一点教训

编辑:新闻中心新城建站 关注: 时间:2019-10-25 12:57:13


温馨提示:专业网站建设、小程序制作、APP开发,尽在新城建站,详询 15544599750(手机、微信、QQ同号)

文前导读:

吉娜现身贝拉米有机新品发布会 做足功课期待“好孕”

衡水蓝光雍锦半岛开发商怎么样?全国范围的品牌地产!

衡水中景左岸香颂地址在哪里?占据主干道,位置优越!

开通微信公众号认证所需材料

很简单的东西,因为在学习中遇到了,所以记录下来.

 

事情的起因是,我在做一个购物蓝时,将一个自定义的类CartManager整个放进Session中,它的部分代码如下,其实就是有一个Private的ArrayList成员_cart用来放CartInfo类实例,而CartInfo类又包括一个成员ProductInfo _product和一个double _moneny...并不复杂.但是我都没有弄任何Serializable的东西,于是...

本机调试没问题,放到服务器上却发现这个购物车表现非常怪异,时好时坏,总觉得好象Session里的东西乱得很,有时能存进去有时存不进?

比较了本机与服务器的环境,我知道问题肯定与SessionState有关.因为服务器用了Web Farm(并且将最大工作进程数设置成了10).

一般我们在做一个WEB Application的时候,它的SessionState的Mode=InProc的,可参见web.config文件中的配置

<sessionState 
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两种方式保存会话状态,要求对象是可序列化的(大意如此)...所以我们还需要再将对象做一下可序列化声明.

如果要保存的对象很简单,都是由基本类型组成的,就只需要声明一下属性即可,如:

[Serializable()] 
public class ProductInfo { 

private string f_SysID; 


public string SysID { 
get { 
return this.f_SysID; 

set { 
this.f_SysID = value

对于本例中,CartInfo 与 ProductInfo两个类,可以这样声明一下.只是CartManager就稍多几句话,如下:


[Serializable] 
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的可序列化声明,于是就一切正常了...

拓展阅读:

吉娜现身贝拉米有机新品发布会 做足功课期待“好孕”

衡水蓝光雍锦半岛开发商怎么样?全国范围的品牌地产!

衡水中景左岸香颂地址在哪里?占据主干道,位置优越!

开通微信公众号认证所需材料

微信小程序注册流程

使用电子化在线核验的备案流程(企业备案)

使用电子化在线核验的备案流程(个人备案)

衡水世纪名郡,处于怡然城商圈,周边配套应有尽有!

本文由新城建站整理发布,喜欢请收藏,转载请保留链接 (asp.net)关于SessionState与序列化的一点教训https://www.nccpu.net/htm/news/6276.html

服务支持

我们珍惜您每一次在线询盘,有问必答,用专业的态度,贴心的服务。

让您真正感受到我们的与众不同!