Перекрывающееся вращение применимо только к утилизации пула и не предназначено для упрощения того типа развертывания, который вы описываете или требуете. Если включена перекрывающаяся ротация, существующие запросы в «исходящем» рабочем процессе пула будут разрешены для выполнения, в то время как новые запросы будут отправлены новому созданному рабочему процессу. Это механизм для постепенного перехода к новому рабочему процессу без извлечения коврика из-под существующих запросов. Это все, что он делает.
Папки теневого копирования используются для этой цели:
Для чего нужна папка «Temporary ASP.NET Files»? (Мой ответ)
Опять же, они не предназначены для обеспечения механизма, позволяющего поддерживать работу всей существующей кодовой базы во время загрузки нового сайта.
При развертывании приложения ASP.NET сайт будет плохо себя вести. Пока вы копируете свои сборки, эти файлы будут заблокированы (возможно, исключительно) любым процессом, который обрабатывает загрузку (WebDAV или FTP).
Это вызывает исключения, которые вы наблюдали, и, скорее всего, потому что механизм теневого копирования не может читать новые сборки, пока они не записаны (а WebDAV или FTP снимают блокировки записи).
Кроме того, любые страницы, зависящие от этих сборок, могут (не) компилироваться (теневые), если ожидаемые сигнатуры метода были изменены или удалены, пока не будут загружены правильные страницы. Или, если страницы / представления загружаются первыми, которые зависят от функциональности в сборках, которые еще не развернуты, вы также получите ошибки.
Весь сайт будет в несогласованном состоянии, пока не будет развернут последний файл.
В IIS нет встроенного механизма, обеспечивающего «атомарное» развертывание, то есть загрузите все свои вещи, а затем переключитесь на их выполнение. IIS будет продолжать обслуживать запросы к сайту, а ASP.NET будет продолжать обнаруживать изменения файлов при загрузке приложения.
Единственный способ развернуть приложение без генерации этих ошибок - это включить специальную страницу с именем App_Offline.htm
перед развертыванием, а затем переименовать или удалить после развертывания:
App_Offline.htm - Скотт Гатри
App_Offline.htm и работа с функцией «IE Friendly Errors»
Вы также можете найти эту статью полезной:
Как: подготовиться к развертыванию веб-проекта
Существует несколько более сложная альтернатива, которая включает две папки, например:
d:\websites\site\www-A
d:\websites\site\www-B
Работающий сайт указывает на d:\websites\site\www-A
, а вы развертываете в d:\websites\site\www-B
. Когда вы будете готовы, вы переключите сайт в папку d:\websites\site\www-B
.
Когда вы приходите к развертыванию следующей сборки, вы развертываете в d:\websites\site\www-A
и переключаетесь на нее, когда вы счастливы.
Недостатком является то, что вам нужно быть в тонусе и помнить, какая папка какая.
Кроме того, любой загруженный пользователем контент должен быть синхронизирован между двумя папками (хотя для такой вещи может быть назначена третья папка в виртуальный каталог).