Подтвердить что ты не робот

Очередь запросов сеанса ASP.net

Мне кажется, что ASP.net ставит в очередь все запросы, которые используют один и тот же идентификатор сеанса. Скажем, у вас 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);
}

И сразу же после того, как вы нажмете любую другую страницу, на которую будет передан этот идентификатор сеанса, не имеет значения, делает ли она что-либо, позвоните в Test.aspx.

Последовательность загрузки такая же.

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

Я думаю, мой вопрос в том, как отключить эту функцию. Я понимаю, что полезно иметь так, что состояние сеанса может быть более предсказуемым, однако в моем случае долговременная загрузка страниц отчетов убивает способность пользователей к многозадачности.

4b9b3361

Ответ 1

Это поведение по дизайну; допускается одновременный доступ к состоянию сеанса. Запросы с одинаковым SessionID будут заблокированы исключительно для предотвращения возможного повреждения его состояния.

Чтобы обойти это, вы можете отключить состояние сеанса в своей директиве.

<%@ Page EnableSessionState="false" %>

Прочитайте "Параллельные запросы и состояние сеанса" здесь http://msdn.microsoft.com/en-us/library/ms178581.aspx для более.

Настройка EnableSessionState="ReadOnly" не позволит этой странице получить эксклюзивную блокировку на SessionState (но самой странице придется ждать, пока другие запросы, отличные от ReadOnly, не будут завершены до загрузки).

(Это копия и вставка моего ответа на этот вопрос Сайт ASP.net: страница с длинной загрузкой для пользователя ставит все остальные загрузки страницы для пользователя в режиме "Удержание" . )