Очередь запросов сеанса 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: долго загружаемая страница для пользователя переводит все другие загрузки страницы для пользователя в режим удержания)