IIS 6/7 Threading - долго работающая страница aspx не позволяет другим страницам aspx загружаться - PullRequest
1 голос
/ 12 октября 2010

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

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

Почему это так?Я бы подумал, что IIS сможет обрабатывать несколько одновременных подключений, кажется сумасшедшим, что одна долго работающая страница остановит загрузку любой другой страницы в приложении.Я должен что-то упустить или не понять, как работает IIS.

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

bd

Ответы [ 3 ]

6 голосов
/ 16 ноября 2012

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

Так отключите сеанс,ему не нужно будет ждать какой-либо предыдущей сессии.

в web.config put

<system.web>
    <sessionState mode="Off" />
</system.web>

Теперь вы должны одновременно обрабатывать эти запросы.

5 голосов
/ 18 февраля 2012

Я тоже затронул эту проблему, и для меня оказалось, что это особенность сессии ASP.NET. В основном, если у вас включены сеансы, каждый запрос будет возвращаться в порядке поступления на пользователя .

Попробуйте использовать 2 разных браузера, для меня он больше не блокируется. Вот похожий вопрос:

IIS 5.1 в XP Classic ASP работает в однопоточном режиме

0 голосов
/ 12 октября 2010

Это проблема с многопоточностью. Хотя IIS может обрабатывать несколько соединений одновременно, ASP.NET по умолчанию настроен в однопоточном режиме.

Этот выбор от Microsoft состоял в том, чтобы запретить фиктивным разработчикам совершать типичные ошибки параллелизма. ASP.NET для Mono не показывает такое поведение, и если вы обращаетесь к общим ресурсам без предварительной блокировки, вы можете быть ... f ... вы знаете;) желтой страницей смерти.

Я не помню точную процедуру, но в свойствах вашего сайта вы можете выбрать пул приложений, а также количество потоков . Я видел своими глазами, что IIS6 по умолчанию устанавливает его на 1.

Если вы не можете его найти, скажите мне, и завтра я посмотрю на свой сервер разработки в лаборатории.

Надеюсь на помощь.

...