2011-03-29 22 views

回答

12

如果您有一个无会话控制器,那么您将能够同时处理来自同一浏览器实例的请求。否则,ASP.NET会在收到请求时排队请求,以便为它们顺序访问ASP.NET Session对象,以避免死锁问题或其他竞争条件。

实际上,您可以同时向'Session-ful'控制器发出1个请求,并向'Session-less'控制器发送多个请求。这种模式对于我实现一个长时间运行的流程(通过一个'Session-ful'AsyncController实现),通过AJAX调用从客户端到一个'Session-less'控制器来提供用户更新服务器的长期运行过程。

11

总之一句话:可伸缩性。如果你完全不使用会话,这意味着你的应用程序是无状态的,这非常棒。在网站场景中,您只需投掷另一台服务器,即可准备好处理网站的新负载。您也可以使用进程外会话(如SQLServer或StateServer),会话将在服务器场的所有节点之间共享,但是此状态服务器会成为整个站点的明显单点故障。

会话还有另一个问题:因为会话不是线程安全的,如果对同一会话有两个并行请求(认为是AJAX调用)写入会话的控制器动作,这两个请求将简单地排队并执行顺序。

+0

+1 aha没有想到这一点。奇怪的是,当我输入我的(已删除)答案时,我错误地认为ViewState = S – gideon 2011-03-29 06:53:10

相关问题