Ситуация: классическое приложение ASP, использующее пользовательский пул приложений. Настройки по умолчанию.
На некоторых машинах IIS7 IIS решает обслуживать только одну страницу за раз. Поэтому, если несколько страниц загружают какие-либо страницы с сайта, каждая из них должна загружаться последовательно.
например. Если я загружаю http://foo.com/default.asp из одного браузера и с другого компьютера, я загружаю http://foo.com/differenturl.asp,, то первый должен завершиться, прежде чем загрузится другой. Как будто процесс w3p однопоточный.
Обратите внимание, что в расширенных настройках IIS есть настройка MaxProcesses, которая говорит: «Установите это значение больше 1, чтобы создать веб-сад» (что бы это ни было). Это НЕ решает проблему, потому что порождает несколько процессов с их собственным состоянием сеанса и т. Д., И когда вы загружаете http://foo.com/default.asp, нет никакого способа гарантировать, что вас назначат тому же процессу.
Проблема проявилась, потому что у нас есть страница диагностики, написанная на ASP, которая создает элемент управления ActiveX, который загружает URL-адрес на веб-сайт и возвращает результаты.
Итак, диагностика загружается и в коде на стороне сервера создает небольшой веб-элемент управления, который загружает (например, элемент управления XMLHTTP) default.asp на тот же сервер.
Эта страница НИКОГДА не завершит загрузку, потому что сервер ожидает завершения страницы Diagnics.asp, прежде чем она перейдет на страницу default.asp. Тупик!
Это прекрасно работает на всех машинах IIS6, и я считаю, что есть некоторые серверы IIS7, где они тоже отлично работают.
Я подтвердил, что это не результат нашей странной диагностики. Загрузка нескольких вкладок с одного или нескольких компьютеров покажет, что веб-процесс обрабатывает их по одной за раз.
Правильный ответ от AnthonyWJones: Отладка на стороне сервера включена в IIS7. Это переводит IIS в однопоточный режим.