我在测试二者的区别时分别把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 为进程中管理,指的是在同一进程中,如果是新进程,则状态将丢失