虚拟主机域名注册-常见问题虚拟主机问题 → 虚拟主机问题


(asp.net)关于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的可序列化声明,于是就一切正常了...


文章出自:
http://www.cnblogs.com/sharetop/archive/2005/10/08/250286.html



来源:
阅读:142195
日期:2007-03-29

【 双击滚屏 】 【 推荐朋友 】 【 收藏 】 【 打印 】 【 关闭 】 【 字体: 】 
上一篇:常见术语介绍
下一篇:虚拟主机开启URLrewrite功能的方法介绍
  >> 相关文章
 
闂傚倸鍊峰ù鍥敋瑜庨〃銉╁传閵壯傜瑝閻庡箍鍎遍ˇ顖炲垂閸屾稓绠剧€瑰壊鍠曠花濠氭煛閸曗晛鍔滅紒缁樼洴楠炲鎮欓崹顐㈡珝濠电偛鐡ㄧ划宥囧垝閹捐钃熸繛鎴欏灪閺呮粓鎮归崶銊ョ祷缂佺姾娅g槐鎾存媴閻熸澘顫嶅銈冨妼閻楀繐危閹版澘绠虫俊銈勭娴滃ジ姊洪崨濠佺繁闁搞劍濞婇弫宥夋偄閸忓皷鎷洪柣鐘叉礌閳ь剝娅曢悘鍫ユ⒑閹稿孩绌跨紒鐘虫尭閻g兘鎮╃拠鎻掑敤濡炪倖鎸鹃崰搴♀枔閵夆晜鈷戦梻鍫熺〒婢ф洘绻涚仦鍌氣偓婵嬪箖閿熺姵鏅搁柨鐕傛嫹闂傚倸鍊搁崐鐑芥嚄閼哥數浠氭繝鐢靛仜閻°劌鐣濈粙璺ㄦ殾婵犲﹤鍟犻弸搴ㄧ叓閸ラ鍒版繛鍫亰濮婃椽宕ㄦ繝鍌毿曢梺鍝ュУ閻楁洟顢欒箛鎾斀闁搞儻濡囩粻姘渻閵堝棛澧紒璇插暣婵℃挳宕橀鍡欙紲婵℃彃鏈悧妤呮倶閸溿儳绱撻崒姘偓鎼佸磹妞嬪孩顐介柨鐔哄Т閸ㄥ倿姊婚崼鐔恒€掗柡鍡畵閺岋綁濮€閵堝棙閿梺鎼炲妽缁诲牓寮婚妸鈺傚亞闁稿本绋戦锟�闂傚倸鍊搁崐椋庢濮橆兗缂氶柤濮愬€栫€氬鏌i弮鍌氬付缂佲偓婢舵劕绠规繛锝庡墮婵″ジ鏌涘顒傜Ш妤犵偞鐗楀ḿ蹇涘礈瑜忚摫濠电姵顔栭崹浼村Χ閹间礁钃熼柡鍥风磿閻も偓闂侀潧锛忛崘銊у帓闂傚倷绀侀幖顐︻敄閸ャ劍鍙忛柟缁㈠枟缁犳帗绻濋悽闈涱潚闁告侗鍘滈姀銈嗙厱闁绘洑绀侀悘锔筋殽閻愬弶顥㈤柡浣规崌閺佹捇鏁撻敓锟�婵犵數濮烽弫鎼佸磻濞戙垺鍋ら柕濞у啫鐏婇柟鍏肩暘閸斿瞼澹曢崸妤佺厪闁割偅绻冮ˉ鐐寸箾閸涱垰鈻堥柡宀嬬到铻f繛鍡樺劤濞堫厾绱撴担鍝勵€岄柛銊ㄤ含閹广垹鈽夐姀鐘殿吅闂佺粯鍔楅弫鎼佹倿閼测晝纾藉〒姘搐濞呮瑩鏌熼崙銈嗗闂傚倷娴囬褍霉閻戣棄鏋佸┑鐘宠壘绾捐鈹戦悩鍙夋悙缂佹劖顨婇弻锟犲炊閳轰焦鐏侀梺宕囨嚀缁夋挳鍩為幋锔藉亹闁告瑥顦伴幃娆戠磽娴f彃浜鹃梺绋挎湰缁嬪繑绂嶅⿰鍫熺厵閺夊牆澧界粙鑽ょ棯椤撶偟鍩i柡灞诲€曢~銏犵暆婵犲啰绉锋俊鐐€戦崝濠囧磿閻㈢ǹ绠栨繛鍡樻尭缁犵敻鏌熼悜妯诲鞍闁伙讣缍侀弻锝夋偄閸濄儳鐓傛繝鈷€鍕垫當瀹€锝呯仢閳诲酣骞欓崘鈺傛珨闂備焦瀵х换鍌炈囬鐐村€块柛顭戝亖娴滄粓鏌熼悜妯虹仴妞ゅ繆鏅犻弻锝夘敇閻曚焦鐤侀梺鍝勮閸旀垿骞冮妶澶婄<婵炴垶锕╂导锟�闂傚倷娴囬褍霉閻戣棄鏋佸┑鐘宠壘绾捐鈹戦悩鍙夋悙缂佹劖顨婇弻锟犲炊閳轰焦鐏侀梺宕囨嚀缁夋挳鍩為幋锔藉亹闁告瑥顦伴幃娆撴⒑濮瑰洤鈧倝宕抽敐澶婅摕闁靛ň鏅滈崑鍡涙煕鐏炲墽鈽夋い蹇ユ嫹闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢埛姘そ婵¤埖寰勭€n亙妲愰梻渚€娼ц墝闁哄懏鐩幏鎴︽偄閸忚偐鍙嗛梺缁樻礀閸婂湱鈧熬鎷�缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸閻ゎ喗銇勯弽顐粶闁搞劌鍊婚幉鎼佹偋閸繄鐟查梺绋款儑閸犳劙濡甸崟顖氬唨妞ゆ劦婢€缁墎绱撴担鎻掍壕闂佺硶鍓濈粙鎺楁偂濞戙垺鐓曟い鎰Т閻忣亪鏌¢崱蹇旀珖缂佽鲸甯為埀顒婄秬閸╂牜鈧熬鎷�缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸閻ゎ喗銇勯弽顐粶闁搞劌鍊婚幉鎼佹偋閸繄鐟查梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě鍛帓闂備焦妞块崢鐣屽枈瀹ュ洦宕叉繛鎴烇供閸熷懏銇勯弮鍥у惞闁告垵缍婂娲箰鎼达絻鈧帡鏌涢悩宕囧⒌鐎殿喖顭烽弫鎾绘偐閺屻儱鏁规繝鐢靛█濞佳囨偄閸℃稑顫呴柣姗嗗亝閺傗偓婵$偑鍊栧褰掑磿閹惰棄鍑犳繛鎴炲焹閸嬫挾鎲撮崟顒傤槰婵犵數鍋涢敃顏勵嚕椤愶箑绠荤紓浣股戝▍銏ゆ⒑鐠恒劌娅愰柟鍑ゆ嫹闂傚倸鍊搁崐鐑芥嚄閸撲焦鍏滈柛顐f礀閻ょ偓绻濋棃娑卞剰缂佹劖顨婇獮鏍庨鈧俊鑲╃磼閻樺磭澧甸柡宀嬬節瀹曞爼鍩℃担閿嬬潖闂備礁鎼鍡涙偋閻樿钃熼柡鍥╁枔缁犻箖鏌涢…鎴濇灈濠殿喖閰e娲传閸曨偀鍋撻悽绋跨;闁跨噦鎷�闂傚倷娴囬褍霉閻戣棄鏋佸┑鐘宠壘绾捐鈹戦悩鍙夋悙缂佹劖顨婇弻锟犲炊閳轰絿锝嗐亜椤愶絾绀嬮柡宀€鍠栭幃婊兾熼悜鈺傚闂備焦妞块崢浠嬪箲閸ヮ剙钃熺€广儱鐗滃顏堟⒑閻熸澘娈╅柟鍑ゆ嫹.闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁嶉崟顒€搴婇梺閫炲苯澧撮柡灞诲€楅埀顒€婀辨慨鎾偂閹扮増鐓涢柛娑氬绾箖鏌嶇憴鍕伌鐎规洜鍘чオ浼村礋椤愩埄鈧繘姊婚崒娆愮グ婵炲娲熷畷鎶芥晝閸屾氨顔嗛梺璺ㄥ櫐閹凤拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鍨鹃幇浣圭稁婵犵數濮甸懝鍓у缂佹ḿ绠鹃柟瀛樼懃閻忊晠鏌i鐕佹疁闁哄被鍔戦幃銈夊磼濞戞﹩浼�:0898-31568060婵犵數濮烽弫鎼佸磻閻愬搫鍨傞柛顐f礀缁犳澘鈹戦悩瀹犲缂佺姵婢樿灃闁挎繂鎳庨弳娆撴煕濮橆剛绉洪柡灞诲姂閹倝宕掑☉姗嗕紦:13807590485