Сайт 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 запросов от пользователя перед загрузкой).