完全替换ASP.NET的会话

完全替换ASP.NET的会话

ASP.NET会话对于传统的WebForms应用程序来说似乎是完美的,但是对于现代Ajax和MVC应用程序来说,它们做了一些严重的问题。

具体来说,只有3种方法可以访问ASP.NET提供程序:

  1. 锁定读写(默认)-会话被锁定在AcquireRequestState射击直到ReleaseRequestState火灾。如果浏览器同时发出3个请求,它们将在服务器上排队。这是MVC 2中唯一的选择,但是MVC 3允许.

  2. 非锁定只读-会话没有锁定,但无法保存到这似乎是不过不可靠,因为有些读取似乎再次锁定会话。

  3. 会话禁用-任何读取或写入会话的尝试都会引发异常。

然而,使用现代MVC应用程序,我有很多Ajax事件同时发生-我不希望它们成为服务器上的队列,但我确实希望它们能够写入会话。

我想要的是第四种模式:脏读,最后写赢

我认为(很高兴得到纠正),唯一能做到这一点的方法就是完全取代ASP.NET的会话。我可以写我的自己的提供者,但是ASP仍然会用它所支持的3种模式之一来调用它。是否有任何方法使ASP.NET支持乐观并发?

这就让我用一个新的类替换了对会话的所有调用,这个类基本上是做同样的事情,但不锁定-这是一种痛苦。

我希望尽可能多地保留当前会话内容(最重要的是,在各种日志中保留会话ID),并尽可能减少代码替换量。有什么办法吗?理想情况下我想HttpContext.Current.Session指向我的新类,但不锁定任何请求。

有人做过这样的事吗?似乎奇怪的是,对于所有的AJAXey MVC应用程序,这是一个新的问题与ASP。


当年话下
浏览 425回答 3
3回答

万千封印

优秀点(稍后将+1),但它忽略了一个事实,即使‘锁定’ASP会话可以乐观的多服务器环境无论如何。如果我需要独占锁定,那么我需要它工作,无论InProc或者分散在一个大农场上。如果我不能完全依赖排他性锁定,那么我必须把一切都当作是被并发调用覆盖/丢弃一样。
打开App,查看更多内容
随时随地看视频慕课网APP