Как предотвратить IIS от компиляции веб-сайта?
У меня есть веб-приложение ASP.NET, которое на бэкэнд говорит с веб-службой ASMX. Мы подсчитали, а среднее время ожидания для первоначального запроса - 20 секунд. Мне интересно, есть ли способ отправить веб-службу на предварительно скомпилированный сервер, тем самым отрицая необходимость компиляции.
Мы также заметили, что IIS имеет тенденцию перерабатывать свои рабочие потоки, и это также вызывает компиляцию. Сам процесс недоступен очень часто, но он должен быть намного быстрее, если он есть.
Любые мысли?
Заранее спасибо
Обновление: благодаря всем предложениям я попробовал несколько из них, и вот что я нашел. Время выключения/передела вторжения опасно, потому что я не хочу, чтобы потоки просто сидели без дела. При дальнейшей проверке сайт собирается предварительно скомпилированным, поэтому мой вопрос заключается в том, почему есть начальное время для веб-службы?
Прямо сейчас: склоняется к предложению разминки script ниже
Обновление. Услуга удаляется с веб-сервера на другой машине. Мы видим проблемы только с первоначальным запросом.
Ответы
Ответ 1
Один альтернативный подход - написать "разминку script", которая просто выполняет одну страницу из вашего приложения. Это заставит сервер развернуться для вас, и следующий человек получит быстрый удар. Вы также можете установить запланированный процесс для запуска этого script изредка (например, если вы планируете перезапуск пула потоков в 4 часа ночи, запланируйте разминку script для запуска в 4:01 утра)
Ответ 2
Вы должны искать выполнение предварительной компиляции как часть ваших сценариев сборки/развертывания.
Наличие активности после развертывания для программного запроса каждого веб-ресурса и срабатывания триггера кажется мне довольно неудобным.
Ответ Томаса дает компилятор, там также есть руководство в MSDN, Как: Предварительно скомпилировать веб-сайты ASP.NET.
Если вы используете MSBuild, перейдите к Задача AspNetCompiler.
(Я, вероятно, сделал бы это комментарий, но мне еще не разрешено... недостаточно СО-сока)
Ответ 3
Вы пытались использовать aspnet_compiler в папке фрейма (например,% SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727)?
Вы можете управлять переработкой ASP.NET с помощью настроек пула приложений. Если он повторно используется чаще, чем настройки, то что-то другое вызывает (например, изменения в файле web.config и т.д.)
Ответ 4
Попробуйте отключить повторное использование приложения в конфигурации пула страниц или приложений в IIS.
IIS 6 (если я правильно помню): Rightclick на AppPool → вкладка "Производительность" → Снимите флажок "Завершить рабочий процесс в режиме простоя"
IIS 7.5. Существует свойство (похоже, также параметры AppPool), которое отключает AppPool после X минут простоя. Значение 0 равно "никогда не выключается"
Надеюсь, что это поможет
Ответ 5
На предыдущей позиции у нас были аналогичные проблемы с услугами WCF, когда мы сперва намотали буфер, мы обошли это, создав простую программу, которая будет вызывать все наши веб-службы после развертывания.
Вы также можете использовать эту программу такого же типа, как услуга keep alive, и просто пинговать службы каждые 5-10 минут и т.д.