[心得] 一段stateServer+session+delegate+callback的故事
使用語言:ASP.NET+VB.NET
前情提要:小弟我之前為了處理一個頭痛的問題(詳見我上兩篇文章),
再加上O2000大大的熱情贊助,讓我一頭栽進了Delegate+Callback的世界。
一開始,在使用Delegate+Callback會需要用到Session去紀錄狀態(判斷程式是否結束),
在O2000大大提供的例子,Session可以正常運作,然而我拿來依樣畫葫蘆,
卻碰到Sys.Webforms.pageRequestManagerServerErrorException,狀態碼:500
(原本的timeoutException已經用重新撰寫來縮短執行時間 ~"~)
當然,身為一位芸芸眾生中的小小工程師,GOOGLE是你最好的導師兼朋友 XD
在經過一陣汪洋大海的搜尋後,一切的一切都指向萬惡的web.config,
(web.Config:科科,怪我囉?!)
在web.config當中有個設定叫sessionState,
其中mode可以有好幾種設定值,預設是InProc,
據說為了防止Session突然消失,可以設定成StateServer or SQLServer。
這神奇的問題就發生在,當mode="StateServer"的時候,
依照程式邏輯,在callback執行後,會去跑Page_Load,
神奇的是,在這個時候,Session遺失了,並且發生上述的Exception;
同樣的程式,將mode設定為預設值,也就是InProc,
一切正常,Session健在,程式長存。
(謎:阿彌陀佛~善哉善哉)
在拿了O2000大大可以正常運作程式來實驗之後,更加深了我對這的結果的信任,
發現問題,自然就要找解決的辦法,既然沒辦法從mode上去著手,只能從程式上動刀,
不能用Session來搭配Delegate+callback,總還有其他的候補能用吧,
cookie、viewState、hiddenField、以及text file,測試開始。
cookie:失敗!因為在callback的時候不能使用Me.response和Me.request
viewState、hiddenfield:失敗!因為跑完callback之後,馬上會去跑Page_Load,
數值通通都會Reset。
text file:成功!在Page_Load的時候,將text file的路徑設定好,
利用Property和ViewStae把數值存下,
這樣一來,不論是Timer Tick事件、BeginInvoke、或是callback的時候,
都能透過Text file的內容去判斷程式是否結束,真是可喜可賀。 ^^/
詳細程式碼晚點奉上,希望能幫助跟我碰到一樣問題的人。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.251.71.22
Web_Design 近期熱門文章
PTT數位生活區 即時熱門文章