香港虚拟主机
本站公告
新闻资讯
虚拟主机帮助
域名帮助
服务器帮助
邮箱帮助
建站帮助
网站推广帮助
VPS帮助
特色主机帮助
网站备案专题
会员帮助信息
代理帮助信息
成功案例
网站百度排名下跌怎么办 教你…
新站应该做到的十条SEO检查方…
怎么注册域名 如何注册域名 …
苍南富生工艺品有限公司-定制…
爱名网注册域名修改NS服务器…
阳光互联注册域名修改NS服务…
万网注册域名修改NS服务器地…
中国数据注册域名修改NS服务…
商务中国注册域名修改NS服务…
新网注册域名修改NS服务器地…
您现在的位置: 江南数联 >> 帮助中心 >> 虚拟主机帮助 >> 正文

关于SessionState与序列化的一点教训

  作者:admin    来源:本站原创    点击次数:29     更新时间:2010-10-21 7:44:52  
     
 
关注石头有礼
 
 

关于SessionState与序列化的一点教训

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

事情的起因是,我在做一个购物蓝时,将一个自定义的类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的可序列化声明,于是就一切正常了...

本章关健词:江南数联 域名注册 海外虚拟主机 G享虚拟主机 国内虚拟主机 企业邮箱 网站建设 自助建站 400电话申请 微聚商

 
  版权申请:关于SessionState与序列化的一点教训出自江南数联dns06.com未经授权请勿转载!  
 
  • 上一篇帮助:

  • 下一篇帮助:
  •  
         

    扫一扫关注公众号有礼
    Copyright@2004-2015 江南数联 版权所有未经授权请勿复制!
    《中华人民共和国增值电信业务经营许可证》ISP证编号:皖B2-20080036 湘B2-20160056
    公司全称:永州石头网络技术有限公司(运营部)
    地址: 中国·湖南省永州市育才路158号 服务热线:400 616 9260
    安徽公司:安徽仁科信息技术有限公司 地址:合肥万和新城广场A-608 
    关注词:网站空间虚拟空间空间域名域名空间域名主机网站空间哪家好网站空间多少钱