在asp.net 2.0默认的情况下,应用程序的session回跟应用程序一起绑定到aspnet_wp.exe(win 2000和win xp)或者是w3wp.exe (win 2003), 那么这样就有问题了,当我们应用程序内部出现错误或者其他错误时,就会导致aspnet_wp.exe或者w3wp.exe出错,这样应用程序的session就回全数丢失掉,那样对于我们极其不方便。
后来查找了一下资料发现asp.net 2.0有这样一个机制,就是可以由用户自己选择用什么方式来保存应用程序的session。这个就是我们下面要讲的SessionStateMode 。
SessionStateMode 是一个枚举类型,下面是该类型的成员及状态模式:
InProc 模式,此模式将会话状态存储在 Web 服务器上的内存中。这是默认设置。
StateServer 模式,此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。
SQLServer 模式将会话状态存储到一个 SQL Server 数据库中。这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。
Custom 模式,此模式允许您指定自定义存储提供程序。
Off 模式,此模式禁用会话状态。
为了解决上面说到的问题,我们选用StateServer模式,下面是启用该模式的具体说明:
StateServer 模式将会话状态存储在一个称为 ASP.NET 状态服务的进程中,该进程是独立于 ASP.NET 辅助进程或 IIS 应用程序池的单独进程。使用此模式可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器。
若要使用 StateServer 模式,必须首先确保 ASP.NET 状态服务运行在用于存储会话的服务器上。ASP.NET 状态服务在安装 ASP.NET 和 .NET Framework 时作为一个服务进行安装。ASP.NET 状态服务安装在以下位置:
systemroot\Microsoft.NET\Framework\versionNumber\aspnet_state.exe
(具体就是启动:ASP.NET State Service 服务)
若要将某个 ASP.NET 应用程序配置为使用 StateServer 模式,请在该应用程序的 Web.config 文件中执行以下操作:
将sessionstate元素的 mode 属性设置为 SQLServer。
将stateConnectionString属性设置为 tcpip=serverName:42424。
这里要注意:stateConnectionString的servername要跟IIS的虚拟目录的设置要一致,如果是本地的话请设置为:localhost或者127.0.0.1,如果是远程服务器的话,请设置为远程服务器的IP地址。(虽然是罗嗦了点,但是还是说完了)