Как предотвратить 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 минут и т.д.