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