服務(wù)熱線
153 8323 9821
我在測(cè)試二者的區(qū)別時(shí)分別把sessionState設(shè)置為: "StateServer " 和 Mode= "InProc " 在 "StateServer "模式下也啟動(dòng)了ASP.net State service服務(wù)。
但是在兩種模式下,我按同樣的代碼:
private void Button1_Click(object sender, System.EventArgs e)
{
Session[ "sessionname "] = edtName.Text;
}
private void Button2_Click(object sender, System.EventArgs e)
{
if(Session[ "sessionname "] != null)
lblSession.Text = Session[ "sessionname "].ToString();
else
lblSession.Text = "no session ";
}
button1保存值到session里,button2從session中取出顯示在label上。
我分別在: "StateServer " 和 Mode= "InProc "兩種情況下存入session-》關(guān)閉IIS服務(wù)-》重新啟動(dòng)IIS-》點(diǎn)擊button2取回session中的值。
但是得到的結(jié)果都是一樣的,我看msdn上說(shuō) "InProc "方式應(yīng)該在關(guān)閉iis時(shí)丟失session中的變量啊
???????
回答:
兩種方式在編程上面應(yīng)該沒(méi)有什么區(qū)別,他們一個(gè)是進(jìn)程內(nèi)的一個(gè)是獨(dú)立進(jìn)程的,進(jìn)程內(nèi)的是指Session的值都保存在aspnet_wp.dll進(jìn)程里面,進(jìn)程外的是指保存在一個(gè)單獨(dú)的進(jìn)程里面叫aspnet_state.dll里面!
StateServer要求你的StateServer服務(wù)必須已經(jīng)啟動(dòng)
InProc不需要
程序運(yùn)行期間,你的程序重新編譯或者改動(dòng)過(guò)webconfig的時(shí)候
InProc 丟失,需要重新登陸
StateServer不會(huì)丟失,除非停掉此服務(wù)或者默認(rèn)的20分鐘到期
再補(bǔ)充一點(diǎn),Session_OnEnd 事件僅支持進(jìn)程內(nèi)會(huì)話狀態(tài)模式。如果使用狀態(tài)服務(wù)器或 SQL Server 模式,則不會(huì)引發(fā)該事件。
StateServer狀態(tài)服務(wù)器管理,設(shè)置管理狀態(tài)的服務(wù)器IP地址 ,InProc 為進(jìn)程中管理,指的是在同一進(jìn)程中,如果是新進(jìn)程,則狀態(tài)將丟失