Очередь запросов сеанса ASP.net - PullRequest
26 голосов
/ 01 декабря 2010

Мне кажется, что 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"            |**************************************|

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

1 Ответ

21 голосов
/ 01 декабря 2010

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

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

<%@ Page EnableSessionState="false" %>

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

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

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

...