(asp.net)關于SessionState與序列化的一點教訓- 虛拟主機問題,虛拟主機域名注冊-常見問題,虛拟主機,網頁制作,域名注冊,主機,企業郵局,主頁空間,個人主頁,網絡實名,主機托管,網站建設,域名">
  虛拟主機域名注冊-常見問題虛拟主機問題 → 虛拟主機問題


(asp.net)關于SessionState與序列化的一點教訓
作者:
很簡單的東西,因為(wèi)在學習中遇到機行了,所以記錄下來.

事情的起因是,我在做一個購物藍時(shí),将一個自定義的類CartMana熱用ger整個放進Session中,它的部分代碼如(rú)下,其實就是有一會請個Private的ArrayList成員_cart用來放CartInfo類實鐘木例,而CartInfo類又包括一個成員Pro師電ductInfo _product和一個double _mo遠長neny...并不(bù)複雜.但是我都沒有弄任何Serializ新線able的東西,于是...

本機調試沒問題,放到服務器(qì)上卻發現這個購物車(chē)表現非常怪異,唱校時(shí)好(hǎo)時(shí)壞,總覺年裡得(de)好(hǎo)象Session裡的東西亂得(de)很,有時(shí女車)能存進去有時(shí)存不(bù)進?

比較了本機與服務器(qì)的環境,我知道問題肯定與Sess人一ionState有關.因為(wèi)服務器(qì)用了Web Farm(并且将街很最大(dà)工(gōng)作進程數設置成了10).

一般我們(men)在做一個WEB Application的時(shí)候,它的車從SessionState的Mode=InPro如男c的,可參見web.config文件中的配置

<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0見件.0.1:42424"
sqlConnectionString="da舞高ta source=127.0.0.1;Trusted_Connecti務分on=yes"
cookieless="false"
timeout="20"
/>
在服務器(qì)上,因為(wèi)存在多個工(gōng)作進程,所以需要筆兵将它的寫法改成 mode=StateServer了,否則子很就會(huì)造成前面所說(shuō)的Sess的讀ion中的值不(bù)确定的現象.但是,如(rú)果簡還計單地這樣改一下,系統又報錯(cuò)說(shuō跳技)對于以StateServer 或者 SqlServer兩種女兵方式保存會(huì)話狀态,要求對象是可商電序列化的(大(dà)意如(rú)此)...所以哥哥我們(men)還需要再将對象做一下可序列化聲明.

如(rú)果要保存的對象很簡單,都是由基本類型組可她成的,就隻需要聲明一下屬性即可,如(rú):

[Serializable()]
public class Product做樹Info {

private string f_SysI相器D;


public string SysID {
get {
return this.f_SysID;
}
set {
this.f_SysID = value;
}
}

對于本例中,CartInfo 與 Produc黃視tInfo兩個類,可以這樣聲明一下.隻是CartManager就稍多玩為幾句話,如(rú)下:


[Serializable]
public class CartManage信兵r : ISerializable
{
private ArrayList _cart=new ArrayList(音愛);

public CartManager()
{
}

protected CartManager(Se呢又rializationInfo info, Strea國黃mingContext context)
{
this._cart=(ArrayList)info.南山Getvalue("_cart",typeof(ArrayL厭知ist));
}

void ISerializable.GetObjectData(S站拍erializationInfo info, Stream子文ingContext context)
{
info.Addvalue("_cart",this._cart);
}

private CartInfo findCartInfo(string si靜銀d)
{
foreach(CartInfo ci in this._cart來筆)
{
if( ci.Product.SysID.Equals(sid) )玩玩 return ci;
}
return null;
}


public ArrayList get購站Cart()
{
return this._cart;
}


這樣實現了整個CartManager--好女CartInfo--ProductInfo的可序列化聲明,于是就一切正常土水了...


文章出自:
http://www.cnblogs.com/sha媽慢retop/archive/2005/10/08/250286.htm東湖l



來源:
閱讀:5526
日期:2007-03-29

【 雙擊滾屏 】 【 推薦朋友 】 【 收藏 】 【 打印 】 【 關閉 】 【 字體:大(dà) 】 
上一篇:常見術語介紹
下一篇:虛拟主機開(kāi)啟URLrewrite功能的方法介紹
  >> 相關文章