Nic*_*ton 10 asp.net concurrency session
ASP.NET不允许同一会话的并发请求; 意味着用户一次只能发出1个请求.
例如,假设我们有Test1.aspx
:
public partial class Test1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["test"] = 1;
System.Threading.Thread.Sleep(int.Parse(Request.QueryString["timeout"]));
}
}
Run Code Online (Sandbox Code Playgroud)
......和Test2.aspx
:
public partial class Test2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["test"] = 1;
Label1.Text = DateTime.Now.ToString("dd/MM/yy HH:mm:ss");
}
}
Run Code Online (Sandbox Code Playgroud)
当我们访问Test1.aspx?timeout=10000
,然后在访问后立即Page2.aspx
,第二个请求必须等待10秒,直到第一个请求完成.
我今天刚刚学会了这个,我已经使用ASP.NET 5年了!直到我在MSDN页面底部(ASP.NET会话状态概述)中读到它,我才真正相信它.
那么,有没有办法强制并发?也就是说,除了使页面更快,或将长时间运行的代码移动到后台线程之外.我知道你可以让会话只读,但我不完全确定这是一个实用的选择.
尽管我刚刚从问题中了解到这一点,但我一定要检查实现会话状态存储提供程序中的锁定会话存储数据部分,以获取有关其完成原因的更多信息。
基于以上所述,尝试绕过该机制似乎确实不是一个好主意。
正如您所提到的,保持请求简短并将长时间运行的代码移出请求线程。此外:
无论如何,所有这些都是你应该已经在做的事情。
归档时间: |
|
查看次数: |
2032 次 |
最近记录: |