Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья поможет устранить проблему, из-за которой информация, связанная с сайтом IIS, не удаляется во время программного удаления сайта.
Исходная версия продукта: службы IIS
Исходный номер базы знаний: 3202096
Симптомы
Рассмотрим следующий сценарий:
- Вы удаляете сайт с помощью вызовов
appcmd
или управляемых API, предоставляемых двоичными файламиMicrosoft.Web.Administration
. - Вы создаете новый сайт в службы IIS (IIS).
- Новый сайт по-прежнему использует устаревшие метаданные удаленного сайта.
В этом сценарии при попытке получить доступ к созданному сайту возникает непредвиденное поведение. Например, в веб-браузере может появиться сообщение об ошибке HTTP 503 — служба недоступна .
Причина
Проблема возникает, когда операция удаления для существующего веб-сайта в IIS выполняется программным способом с помощью appcmd
или Microsoft.Web.Administration
API, а также если сайт имеет устаревшие свойства, определенные в <CustomMetaData>
элементе конфигурации файла конфигурации файла ApplicationHost.config сервера IIS. Сведения в теге <CustomMetaData>
, относящееся к сайту, не удаляются в этом сценарии. Если новый сайт с тем же идентификатором создается после операции удаления, этот новый сайт связан с устаревшими свойствами старого сайта.
Решение
Консоль администрирования IIS можно использовать для удаления веб-сайта вместо вызова appcmd
или Microsoft.Web.Administration
. Этот метод гарантирует наличие пользовательских свойств прежних версий, связанных с веб-сайтом, который вы пытаетесь удалить, они также удаляются из файла конфигурации IIS (ApplicationHost.config). Это поведение предотвращает неожиданное связь этих свойств с новым веб-сайтом, создаваемым на том же сервере, который повторно использует идентификатор старого удаленного сайта.
Если вы должны программно удалить сайт по какой-либо причине и не можете использовать консоль диспетчера IIS, можно добавить один из двух обходных путей, чтобы убедиться, что сведения о устаревших свойствах, связанных с сайтом, через <CustomMetaData>
элемент также удаляются.
Обходное решение 1. Использование команд appcmd
Если вы используете appcmd
для удаления сайта, можно выполнить следующую команду, чтобы удалить все устаревшие свойства, которые сайт может иметь в конфигурации IIS:
Appcmd clear config -section:customMetadata -[path='LM/W3SVC/<SiteID>']
Примечание.
Замените <SiteID>
параметр идентификатором сайта, который вы только что удалили с помощью appcmd
команд.
Решение 2. Использование вызовов Microsoft.Web.Administration
При использовании вызовов управляемого API для Microsoft.Web.Administration
удаления веб-сайта можно добавить следующий код после удаления веб-сайта, чтобы очистить устаревшие свойства, содержащиеся в <CustomMetaData>
элементе конфигурации IIS:
string path = "LM/W3SVC/" + site.Id.ToString(CultureInfo.InvariantCulture);
string pathWithSlash = path + "/";
for (int i = customMetadata.Count - 1; i >= 0; i--) {
ConfigurationElement metadata = customMetadata[i];
string key = (string)metadata["path"];
if (key != null &&
(
key.Equals(path, StringComparison.OrdinalIgnoreCase) ||
key.StartsWith(pathWithSlash, StringComparison.OrdinalIgnoreCase))
)
{
customMetadata.RemoveAt(i);
}
}
Примечание.
Переменная site
представляет веб-сайт, который вы только что удалили с помощью Microsoft.Web.Administration
API.
Шаги для воспроизведения
В Windows Server:
Установите функцию совместимости метабазы IIS 6.
В диспетчере IIS создайте второй веб-сайт: вызовите этот WebTest и сделайте его выполнение в любом пуле приложений нужным.
Откройте командную строку и перейдите к:
C:\inetpub\AdminScripts
Введите команду
adsutil.vbs SET w3svc/2/ServerSize "23"
, чтобы добавить следующий раздел в тег W3SVC в файле конфигурации ApplicationHost.config :<customMetadata> .... <key path="LM/W3SVC/2"> <property id="1018" dataType="DWord" userType="1" attributes="Inherit" value="23" /> </key> .... </customMetadata>
Перейдите к внутренней
C:\windows\system32\inetsrv\
командной строке.Выполните следующую команду:
appcmd delete site WebTest
.После удаления сайта раздел конфигурации по-прежнему находится в applicationHost.config.