ASP.Net中的会话模式?

时间:2009-11-21 13:57:53

标签: asp.net session-state

以下哪种会话模式,我应该为我的ASP.Net网站实现吗?

1)InProc。 2)状态服务器。 3)SQL Server。 4)自定义。

3 个答案:

答案 0 :(得分:4)

这完全取决于您的情况以及您希望运营的网站类型。

我怀疑您预期的流量及其运行的硬件也是一个重要因素。

您能否提供更多信息。

效果考虑因素

  • InProc - 速度最快,但会话数据越多,网络服务器上消耗的内存就越多,这会影响性能。

  • StateServer - 存储基本类型的数据(例如字符串,整数等)时,在一个测试环境中,它比InProc慢15%。但是,如果您要存储批次,则序列化/反序列化的成本会影响性能 对象您必须为自己的方案执行性能测试。

  • SQLServer - 存储基本类型的数据(例如字符串,整数等)时,在一个测试环境中,它比InProc慢25%。与StateServer中的序列化相同的警告。

稳健性

  • InProc - 如果工作进程(aspnet_wp.exe)重新开始,或者appdomain重新启动,则会话状态将丢失。这是因为会话状态存储在appdomain的内存空间中。有关详细信息,请参阅KB324772

  • StateServer - 解决InProc模式下的会话状态丢失问题。允许webfarm在中央服务器上存储会话。 State Server的单点故障。 SQLServer - 与StateServer类似。此外,会话状态数据可以在SQL服务器重新启动后继续存在,并且在遵循KB 311029中的说明后,您还可以利用SQL Server故障转移群集。

以上是Peter A. Bromberg撰写的文章摘录here

答案 1 :(得分:0)

没有一个明确的答案。这取决于您的应用程序的工作方式,您拥有的服务器数量,您对失败的容忍度等等。我会read up on the differences然后做出明智的选择。

如果你从一开始就可以将会话中存储的所有内容序列化,那么从一种模式切换到另一种模式通常都相当容易,除非你使用的是Session_End事件,它只在proc模式下使用时触发

答案 2 :(得分:0)

默认为InProc,适用于大多数中小型网站。你只需使用它,就不必实现任何东西了。

如果您有任何特殊的情况,例如负载均衡的服务器或极端数量的用户,您将需要一些其他方法。