(asp.net)關(guān)于SessionState與序列化的一點(diǎn)教訓(xùn)- 虛擬主機(jī)問(wèn)題,虛擬主機(jī)域名注冊(cè)-常見(jiàn)問(wèn)題,虛擬主機(jī),網(wǎng)頁(yè)制作,域名注冊(cè),主機(jī),企業(yè)郵局,主頁(yè)空間,個(gè)人主頁(yè),網(wǎng)絡(luò)實(shí)名,主機(jī)托管,網(wǎng)站建設(shè),域名">

人人爽天天摸天天碰天天添,亚洲成在人网站天堂日本,欧美日韩人成视频在线播放,午夜欧美精品久久久久久久

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


(asp.net)關(guān)于SessionState與序列化的一點(diǎn)教訓(xùn)
作者:
很簡(jiǎn)單的東西,因?yàn)樵趯W(xué)習(xí)中遇到了,所以記錄下來(lái).

事情的起因是,我在做一個(gè)購(gòu)物藍(lán)時(shí),將一個(gè)自定義的類(lèi)CartManager整個(gè)放進(jìn)Session中,它的部分代碼如下,其實(shí)就是有一個(gè)Private的ArrayList成員_cart用來(lái)放CartInfo類(lèi)實(shí)例,而CartInfo類(lèi)又包括一個(gè)成員ProductInfo _product和一個(gè)double _moneny...并不復(fù)雜.但是我都沒(méi)有弄任何Serializable的東西,于是...

本機(jī)調(diào)試沒(méi)問(wèn)題,放到服務(wù)器上卻發(fā)現(xiàn)這個(gè)購(gòu)物車(chē)表現(xiàn)非常怪異,時(shí)好時(shí)壞,總覺(jué)得好象Session里的東西亂得很,有時(shí)能存進(jìn)去有時(shí)存不進(jìn)?

比較了本機(jī)與服務(wù)器的環(huán)境,我知道問(wèn)題肯定與SessionState有關(guān).因?yàn)榉⻊?wù)器用了Web Farm(并且將最大工作進(jìn)程數(shù)設(shè)置成了10).

一般我們?cè)谧鲆粋(gè)WEB Application的時(shí)候,它的SessionState的Mode=InProc的,可參見(jiàn)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"
/>
在服務(wù)器上,因?yàn)榇嬖诙鄠(gè)工作進(jìn)程,所以需要將它的寫(xiě)法改成 mode=StateServer了,否則就會(huì)造成前面所說(shuō)的Session中的值不確定的現(xiàn)象.但是,如果簡(jiǎn)單地這樣改一下,系統(tǒng)又報(bào)錯(cuò)說(shuō)對(duì)于以StateServer 或者 SqlServer兩種方式保存會(huì)話(huà)狀態(tài),要求對(duì)象是可序列化的(大意如此)...所以我們還需要再將對(duì)象做一下可序列化聲明.

如果要保存的對(duì)象很簡(jiǎn)單,都是由基本類(lèi)型組成的,就只需要聲明一下屬性即可,如:

[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è)類(lèi),可以這樣聲明一下.只是CartManager就稍多幾句話(huà),如下:


[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;
}


這樣實(shí)現(xiàn)了整個(gè)CartManager--CartInfo--ProductInfo的可序列化聲明,于是就一切正常了...


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



來(lái)源:
閱讀:7171
日期:2007-03-29

【 雙擊滾屏 】 【 推薦朋友 】 【 收藏 】 【 打印 】 【 關(guān)閉 】 【 字體: 】 
上一篇:常見(jiàn)術(shù)語(yǔ)介紹
下一篇:虛擬主機(jī)開(kāi)啟URLrewrite功能的方法介紹
  >> 相關(guān)文章