Очередь запросов сеанса 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"            |**************************************|

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

1 ответ

Решение

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

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

<%@ Page EnableSessionState="false" %>

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

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

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

Другие вопросы по тегам