ASP.Net会话看起来非常适合传统的WebForms应用程序,但它们会为现代AJAX和MVC应用程序做一些严重问题.
具体来说,只有3种方法可以访问ASP.Net提供者:
锁定读写(默认) - 会话被锁定,AcquireRequestState直到ReleaseRequestState触发为止.如果浏览器立即发出3个请求,他们将在服务器上排队.这是MVC 2中唯一的选择,但MVC 3允许......
非锁定只读 - 会话未锁定,但无法保存.这似乎是不可靠的,因为有些读取似乎再次锁定会话.
会话已禁用 - 任何读取或写入会话的尝试都会引发异常.
然而,对于一个现代的MVC应用程序,我有很多AJAX事件同时发生 - 我不希望它们在服务器上的队列,但我希望他们能够写入会话.
我想要的是第四种模式:脏读,最后写赢
我认为(很高兴得到纠正)唯一的办法就是完全取代ASP.Net的会话.我可以编写自己的提供程序,但ASP仍会使用它支持的3个模式中的一个调用它.有没有办法让ASP.Net支持乐观并发?
这使得我用一个基本上做同样事情的新类替换对会话的所有调用,但是没有锁定 - 这是一个痛苦.
我希望保留尽可能多的当前会话内容(最重要的是在各种日志中的会话ID),并且代码更换量最少.有没有办法做到这一点?理想情况下,我想HttpContext.Current.Session指向我的新类,但没有ASP.Net锁定任何请求.
有没有人做过这样的事情?看来奇怪的是,所有的AJAXey MVC应用程序都是ASP的一个新问题.
鉴于此处的图表,我应该注意什么才能找出瓶颈?正如您所看到的,请求在负载下平均接近14秒,并且大部分时间归因于New Relic的分析数据中的CLR.在特定页面的性能细分中,它将大部分时间归因于WebTransaction/.aspx页面.


我正在开发一个ASP.NET 4.0 Web Forms项目,经过大约5年的休息,我对提交行为感到困惑.
在按钮的单击事件中,我睡眠线程,以便我可以多次单击提交按钮.
据我所知,ASP.NET阻止了多次调用click事件.这是真的?
顺便说一句:我已经关闭了这个测试的javascript.
asp.net ×3
.net ×1
concurrency ×1
form-submit ×1
newrelic ×1
performance ×1
profiling ×1
session ×1
webforms ×1