服務熱線
153 8323 9821
我在測試二者的區別時分別把sessionState設置為: "StateServer " 和 Mode= "InProc " 在 "StateServer "模式下也啟動了ASP.net State service服務。
但是在兩種模式下,我按同樣的代碼:
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-》關閉IIS服務-》重新啟動IIS-》點擊button2取回session中的值。
但是得到的結果都是一樣的,我看msdn上說 "InProc "方式應該在關閉iis時丟失session中的變量啊
???????
回答:
兩種方式在編程上面應該沒有什么區別,他們一個是進程內的一個是獨立進程的,進程內的是指Session的值都保存在aspnet_wp.dll進程里面,進程外的是指保存在一個單獨的進程里面叫aspnet_state.dll里面!
StateServer要求你的StateServer服務必須已經啟動
InProc不需要
程序運行期間,你的程序重新編譯或者改動過webconfig的時候
InProc 丟失,需要重新登陸
StateServer不會丟失,除非停掉此服務或者默認的20分鐘到期
再補充一點,Session_OnEnd 事件僅支持進程內會話狀態模式。如果使用狀態服務器或 SQL Server 模式,則不會引發該事件。
StateServer狀態服務器管理,設置管理狀態的服務器IP地址 ,InProc 為進程中管理,指的是在同一進程中,如果是新進程,則狀態將丟失