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

У меня есть следующий сценарий (Asp.net 3.5, Windows Server 2008 R2, IIS7):

  • Пользователь1 входит на сайт abc.com с помощью Firefox и переходит на страницу, на загрузку которой уходит несколько минут.
  • Пока эта страница загружается, Пользователь1 не может загружать другие страницы на сайте.
  • Все остальные запросы страниц на сайте для пользователя User1 с этим браузером не получают ответа до тех пор, пока первая страница не завершит загрузку или не истечет время ожидания (тогда другие запросы будут выполнены в быстрой последовательности).
  • Хотя первая страница все еще загружается (и другие запросы находятся в режиме ожидания), если я открою другой браузер (Chrome, хотя может быть и IE), и войду на сайт с тем же пользователем, у меня нет проблем с загрузкой страницы,

Таким образом, кажется, что один отдельный пользовательский сеанс может обрабатывать только один запрос за раз (поскольку вход одного и того же пользователя в другой браузер на самом деле отличается от ASP.net).

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

Мониторинг сервера, нет проблем с памятью (для Sql Server тоже нет). Я делаю это, пока я единственный, кто пользуется сайтом. Сайт ASP.net 3.5, используя проверку подлинности с помощью форм. Единственная нестандартная настройка - это то, что ViewState хранится в Session.

В моих поисках до сих пор я не смог найти ничего, связанного с этим. Если это ожидаемое поведение, как я могу переопределить его? Если это не ожидаемое поведение, что может быть причиной, и как я могу это исправить?

1 ответ

Решение

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

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

<%@Page EnableSessionState="false"/>

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

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

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