Назад | Перейти на главную страницу

Как я могу программно переключить привязку по умолчанию в IIS 7.5 без его выключения?

У нас есть парк серверов IIS 7.5, которые управляют нашим размещенным продуктом. У каждого поколения продукта есть собственный пул приложений и собственный сайт. Каждое поколение привязано к thegeneration.oursite.com, плюс один удачливый веб-сайт получает привязку по умолчанию (которая, очевидно, является той, которую клиенты действительно получают). Когда мы будем готовы перейти на новый сайт, у нас будет инструмент, который пытается переключить привязку по умолчанию со старого поколения на новое. Схема для этого:

  1. Очистите привязки на всех веб-сайтах.
  2. Восстановите пользовательские привязки на всех веб-сайтах
  3. Установите привязку по умолчанию к новому активному поколению.

Все идет нормально. Наш код для этого прост и отлично работает.

Ну, почти. Вот в чем дело: что бы мы ни делали, как бы мы ни пытались структурировать вещи, IIS всегда отключает новую привязку по умолчанию, жалуясь, что теперь есть два сайта с привязками по умолчанию. Это происходит независимо от того, используем ли мы Microsoft.Web.Administration сборка или редактирование applicationHost.config. Примечательно, что запуск сайта вручную после предупреждения о конфликте отлично работает в 100% случаев, и ни то, ни другое applicationHost.config ни в какой момент интерфейс сборки фактически не показывает два сайта с привязкой по умолчанию.

Как мы можем предотвратить отключение IIS 7.5 при замене привязок по умолчанию? Неужели нет возможности это сделать?

РЕДАКТИРОВАТЬ: Меня попросили пояснить, что я имел в виду на примере, поэтому я расскажу о фактическом обновлении одного проекта, которым мы управляем таким образом, Kiln.

Итак, допустим, мы начинаем с двух активных генераций печи: Kiln1.0 и Kiln2.0. Это означает, что у меня есть пулы приложений с этими именами и сайты с этими именами. В основном клиенты на Kiln1.0; только наши тестировщики и бета-пользователи включены Kiln2.0. Учетные записи печи принадлежат субдоменам, поэтому для этого Kiln2.0 сайт имеет привязки, например, для *:80:foo.kilnhg.com, *:80:bar.kilnhg.comи т. д., и Kiln1.0 сайт имеет привязку *:80:* так что любой, кто явно не участвует в тестировании, использует новое поколение.

Когда мы хотим обновить всех до Kiln2.0, мы хотим удалить *:80:* привязка к Kiln1.0 и создать его на Kiln2.0. У меня проблема в том, что каждый способ сделать это отключает Kiln2.0, при этом IIS утверждает, что привязка дублируется. Именно эта конкретная привязка вызывает проблему.

Похоже, вы стали жертвой задержки обновления конфигурации IIS.

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

Да, подождите, говорится. {Сон 10 секунд} в середине командного файла / скрипта / программы, вероятно, тоже заставит его работать.