Повторное развертывание сайта ASP.NET в IIS7 без файлов используемое вмешательство

У нас в настоящее время есть процесс, который заставляет веб-сайты ASP.NET быть повторно развернутыми. Код является самостоятельно приложением ASP.NET. Существующий метод, который работал долгое время, состоит в том, чтобы просто циклично выполниться по всем файлам в одной папке и скопировать их поверх файлов в webroot.

Проблема это возникло, состоит в том, что иногда файлы заканчивают тем, что использовались и следовательно не могут быть скопированы. Это имеет в прошлом, неустойчивый к точке, это не имело значения, но на некоторых наших более высоких транспортных сайтах это происходит большинство времени теперь.

Я задаюсь вопросом, есть ли у кого-либо обходное решение или альтернативный подход к этому, что я не думал. В настоящее время мои идеи:

  1. Просто повторите каждый файл, пока он не будет работать. Это собирается вызвать ошибки в течение короткого времени хотя, который не действительно настолько хорош.
  2. Развернитесь к новой папке и обновите webroot IIS к новой папке. Я не уверен, как сделать это за исключением запуска приложения как администратор и выполнение пакетных файлов, который очень неопрятен.

Кто-либо знает то, что лучший способ сделать это, или если возможно сделать № 2, не запуская приложение публикации как пользователя, у которого есть доступ администратора (Готовый предоставить ему специальные полномочия, но я предпочел бы не доходить до администратора)?

Править
Разъяснение инфраструктуры... У нас есть 2 IIS 7 веб-серверов в NLB выполнение их webroots от общего NAS (Чтобы быть более ясным, они используют тот же самый webroot на NAS). Мы делаем много из развертывается, до такой степени, когда любой подход, который мы не можем автоматизировать действительно, не будет жизнеспособен.

8
задан fyjham 19 March 2010 в 02:38
поделиться

5 ответов

Что вам нужно сделать, так это временно остановить IIS от обработки любых входящих запросов для этого приложения, чтобы вы могли скопировать новые файлы, а затем запустить их снова. Это приведет к небольшому времени простоя для ваших клиентов, но если ваш сайт не является критически важным, это не должно быть такой большой проблемой.

ASP.NET имеет функцию , которая нацелена именно на этот сценарий. По сути, это сводится к временному созданию файла с именем App_Offline.htm в корне вашего веб-приложения. Как только файл будет там, IIS уберет рабочий процесс для приложения и выгрузит все используемые файлы. После копирования файлов можно удалить App_Offline.htm файл, и IIS с радостью снова начнет отток.

Обратите внимание, что пока этот файл находится там, IIS будет использовать его содержимое в качестве ответа на любые запросы к веб-приложению. Поэтому будьте осторожны с тем, что вы помещаете в файл. :-)

12
ответ дан 5 December 2019 в 11:23
поделиться

Вы также можете попробовать изменить временную метку web.config в корневой папке, прежде чем пытаться скопировать файлы. Это выгружает приложение и бесплатно используемые файлы.

0
ответ дан 5 December 2019 в 11:23
поделиться

Если вы вручную не открываете дескриптор файла на своем веб-сервере, IIS не будет блокировать ваши файлы.

Попробуйте закрыть другие службы, которые могут блокировать ваши файлы. Некоторые примеры общих служб, которые именно это делают:

  • Windows Search
  • Google Desktop Search
  • Windows Backup
  • любое другое антивирусное или индексирующее программное обеспечение
0
ответ дан 5 December 2019 в 11:23
поделиться

Другое решение - программное администрирование IIS.

Затем вы можете скопировать ваш новый / обновленный веб-сайт в альтернативный каталог, а затем переключить корень IIS вашего веб-приложения в этот альтернативный каталог. Тогда не имеет значения, заблокированы ли файлы в исходном корне. Это хорошее решение для доступности веб-сайта.

Однако для этого требуется некоторая настройка разрешений ...

Вы можете сделать это через ADSI или WMI для IIS 6 или Microsoft.Web.Administration для IIS 7.

Что касается вашего 2., обратите внимание, что WMI этого не делает требуются права администратора, как это делают ADSI. Вы можете настроить права по объектам. Проверьте консоль WMI (mmc).

2
ответ дан 5 December 2019 в 11:23
поделиться

Поскольку вы уже балансируете нагрузку между 2 веб-серверами, вы можете:

  1. В балансировщике нагрузки переключить веб-сервер A в автономный режим, поэтому только веб-сервер сервер B используется.
  2. Разверните обновленный сайт на веб-сервере A.
  3. (В качестве бонуса вы можете выполнить дополнительный тестовый проход на веб-сервере A, прежде чем он будет запущен в производство.)
  4. В балансировщике нагрузки переведите B в автономный режим и подключите A, чтобы использовался только веб-сервер A.
  5. Разверните обновленный сайт на веб-сервере B.
  6. (В качестве бонуса вы можете выполнить дополнительный тестовый проход на веб-сервере B, прежде чем он будет запущен в производство.)
  7. В балансировщике нагрузки снова установите B в оперативный режим. . Теперь оба веб-сервера обновлены и снова используются в производственной среде.
  8. Элемент списка
1
ответ дан 5 December 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: