虛拟主機(jī)域名注冊-常見(jiàn)問(wèn)題虛拟主機(jī)問(wèn)題 → 虛拟主機(jī)問(wèn)題


(asp.net)關于SessionState與序列化(huà)的(d ≥★e)一(yī)點教訓
作(zuò)者:
很(hěn)簡單的(de)東(dōng)西(xī),因為(wèi)在學習(xí)中遇÷ →到(dào)了(le),所以記錄下(xià)來(lái).

事(shì)情的(de)起因是(shì),我在做(zu≠±♥®ò)一(yī)個(gè)購(gòu)物(wù)藍(lán)時(shí),将一(yī)個♦®§₹(gè)自(zì)定義的(de)類CartManager整個(g←×✔è)放(fàng)進Session中,它的(de)部分(fēn)代碼如(rú)下≠©εφ(xià),其實就(jiù)是(shì)有(yǒu)一(yī)個(gè)Pδλ®∞rivate的(de)ArrayList成員(yuán)_cart用(yò&×ng)來(lái)放(fàng)CartInfo類實例,而CartInfo類又(y™>₹≠òu)包括一(yī)個(gè)成員(yuán)ProductI&≥£nfo _product和(hé)一(yī)≠ 個(gè)double _moneny...并≠ε不(bù)複雜(zá).但(dàn)是(shì)我都(dōu)沒有(←≠yǒu)弄任何Serializable的(α €↔de)東(dōng)西(xī),于是(shì)..✔™♠.

本機(jī)調試沒問(wèn)題,放(fàng)到(dào)服務器(qì)上₩≈ (shàng)卻發現(xiàn)這(zhè)個(gè)購(gò© u)物(wù)車(chē)表現(xiàn)非常怪異,時(shí)好(∏‍∏hǎo)時(shí)壞,總覺得(de)好®÷(hǎo)象Session裡(lǐ)的(de)東(dōng)西(xī)亂®₩得(de)很(hěn),有(yǒu)時(sh↕​í)能(néng)存進去(qù)有(yǒuσ§≈♠)時(shí)存不(bù)進?

比較了(le)本機(jī)與服務器(qì)的(de)環境,我知(zhī)道(dào)問↑☆♦(wèn)題肯定與SessionState有(yǒu)關.因為(wèi)>≤服務器(qì)用(yòng)了(le)Web Farm₽®♠(并且将最大(dà)工(gōng)作(zuò)進程數(shù)設置成了(le)10)♣‍₩.

一(yī)般我們在做(zuò)一(yī)個(gè)WEB Applicatio ₩​n的(de)時(shí)候,它的(de)SessionState的(de)Mode=In£₹​©Proc的(de),可(kě)參見(jiàn)web.config文(wén)件(jiàn)中的(₹≠&de)配置

<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=1←¶27.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
在服務器(qì)上(shàng),因為(wèi)存在多(✔✔duō)個(gè)工(gōng)作(zuò)進∑ ¥程,所以需要(yào)将它的(de)寫法改成 mode•←β=StateServer了(le),否則就(jiù)會(huì)造成前面所說(¶←shuō)的(de)Session中的(de)值不(bù)确定的(de)現(xiàn)象.÷δ‌↑但(dàn)是(shì),如(rú)果簡單地(d®₹♥ì)這(zhè)樣改一(yī)下(xià),≥ ↑"系統又(yòu)報(bào)錯(cuò)說(shuō)對( ✔ duì)于以StateServer 或者 SqlServer兩種方式保存會(huì)話(↓™huà)狀态,要(yào)求對(duì)象是(shì)可(kě)序列化(huà$ε←€)的(de)(大(dà)意如(rú)此)...所以我們還(hái)需要(yào)再将對(duì)象✔ΩΩ≥做(zuò)一(yī)下(xià)可(kě)序列化(huà)聲明(míng).

如(rú)果要(yào)保存的(de)對(duì)象很→​  (hěn)簡單,都(dōu)是(shì)由基本類型組成的®♣(de),就(jiù)隻需要(yào)聲明(míng)一(yī)下(xià)屬性即可(kě),如(€Ω♠rú):

[Serializable()]
public class ProductInfo {

private string f_SysID;


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

對(duì)于本例中,CartInfo 與 ProductInfo兩個(gè)類λ≤∑,可(kě)以這(zhè)樣聲明(míng)一( ☆→yī)下(xià).隻是(shì)Carπ∞♥tManager就(jiù)稍多(duō)幾句話(huà),​÷如(rú)下(xià):


[Serializable]
public class CartManager :↓×←​ ISerializable
{
private ArrayList _cart=new ArrayList();

public CartManager()
{
}

protected CartManager(Serial∏ ™izationInfo info, StreamingContext context₽÷γ‍)
{
this._cart=(ArrayList)info.Get σ value("_cart",typeof(ArrayList✔≠));
}

void ISerializable.Get✘<λ&ObjectData(SerializationIn•≤™fo info, StreamingContext conte♦≈xt)
{
info.Addvalue("_cart",this._cart);
}

private CartInfo findCartInfo(string sid)
{
foreach(CartInfo ci in this._cart)
{
if( ci.Product.SysID.Equals(sid) ) ret✘₽•±urn ci;
}
return null;
}


public ArrayList getCart()
{
return this._cart;
}


這(zhè)樣實現(xiàn)了(le)整個(gè)CartManager--Caγ≤rtInfo--ProductInfo的(de)可(kě)序列化(huà)聲明(míng)φ↕,于是(shì)就(jiù)一(yī)切正常了(le₩£)...


文(wén)章(zhāng)出自(zì)↓€γ>:
http://www.cnblogs.com/s$&haretop/archive/2005¶ /10/08/250286.html



來(lái)源:
閱讀(dú):6925
日(rì)期:2007-03-29

【 雙擊滾屏 】 【 推薦朋(péng)友(yǒu) 】 【 收藏 】 【 打印 】 【 關閉 】 【 字體(tǐ):大(dà) 小(xiǎo) 】 
上(shàng)一(yī)篇:常見(jiàn)術(shù)語介紹
下(xià)一(yī)篇:虛拟主機(jī)開(kāi)啓URLrew←≤₽εrite功能(néng)的(de)方法介紹
  >> 相(xiàng)關文(wén)章(zh™←←‍āng)