ASP.net会话请求排队

在我看来,ASP.net排队使用相同的会话ID的所有请求。假设你有3页。

Default.aspx

protected void Page_Load(object sender,EventArgs e)
{
    Session["asdf"] = "LOLZ";
}

点击此页面显然会创建一个新的会话(如果不存在)。

X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=ibjphuv0aiafqi453tyze345; path=/; HttpOnly

然后你打到Hang.aspx

protected void Page_Load(object sender,EventArgs e)
{
    Thread.Sleep(10000);
}

并且在您点击任何其他页面后,即可将该会话ID传递给它,如果执行任何操作,则不要紧,请将其称为Test.aspx。

加载的顺序是这样的。

Request            Timeline
"GET /"            |*|
"GET /Hang.aspx"       |******************************************|
"GET /Test.aspx"            |**************************************|

我想我的问题是如何禁用此功能。我明白,让会话状态更加可预测是有用的,但是在我的情况下,长时间运行的报告页面加载会杀死用户的多任务能力。

解决方法

这种行为是设计的;不允许并发访问会话状态。具有相同SessionID的请求将被专门锁定,以防止其状态的潜在损坏。

解决这个问题,您可以禁用页面指令中的会话状态。

<%@ Page EnableSessionState="false" %>

阅读“并发请求和会话状态”这里http://msdn.microsoft.com/en-us/library/ms178581.aspx了解更多。

设置EnableSessionState =“ReadOnly”将阻止该页面在SessionState上获得排他锁(但是页面本身不得不等待用户在加载之前完成其他非ReadOnly请求)。

(这是我对这个问题的回答ASP.net site: Long-loading page for user puts all other page loads for user on Hold的复制和粘贴)

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....