Удаление фантомных приложений из пулов приложений в IIS7


38

У меня есть приложение в одном из моих пулов приложений с виртуальным путем «/Site/login.aspx». Я хочу удалить его, но он больше не существует на моем компьютере, и это вызывает у меня проблемы с настройкой AppFabric.

Я понимаю, что вы можете удалить эти фантомные приложения, заново создав приложение в IIS, а затем нажав Удалить. Это избавит приложение от пула, но в этом случае я не могу восстановить приложение из-за /login.aspx в виртуальном пути

Любые идеи, как я могу удалить эту ошибочную запись?

Благодарность

Ответы:


44

Так как у меня была та же проблема; пулы приложений с приложениями, которых больше не существует, я провел некоторое исследование и, наконец, смог решить проблему.

Вот несколько шагов:

  1. Найдите и отредактируйте файл конфигурации IIS 7 «applicationHost.config» с помощью текстового редактора. Он должен храниться в « C: \ windows \ system32 \ inetsrv \ config ». Поскольку папка каким-то образом «защищена», я обычно редактирую так:
    1. Откройте проводник Windows
    2. Перейдите к «C: \ windows \ system32 \ inetsrv \ config»
    3. Скопируйте файл applicationHost.config
    4. Вставьте его в папку, где вы можете редактировать его, например, на рабочий стол
    5. Откройте его с помощью редактора выбора и отредактируйте его
    6. Скопируйте его обратно с помощью проводника Windows в «C: \ windows \ system32 \ inetsrv \ config»
  2. Сделайте резервную копию вашего файла "applicationHost.config"!
  3. Найдите с помощью текстового редактора в вашем applicationHost.config несуществующие приложения. Они должны быть расположены где-то внутри <application ...>узла XML.
  4. Удалите <application ...>узлы всех ваших фантомных приложений.
  5. Сохраните файл и скопируйте его обратно в «C: \ windows \ system32 \ inetsrv \ config»
  6. Обновите консоль управления IIS. Теперь ваши пулы приложений должны быть без фантомных приложений, которые вы ранее удалили.
  7. На самом деле удалите теперь пустой пул приложений.

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


6
Кроме того, я наткнулся на эту статью. Я не использовал его, так как решение, приведенное выше, сработало для меня. Охота на зомби - Как удалить осиротевшие веб-приложения iis
Полковник,

1
Подход Powershell в ссылке в комментарии @ Col выше - это чистое решение, и оно прекрасно работает.
Прием

4

Это, вероятно, безопаснее и проще, чем редактирование applicationHost.config.

Powershell  
PS C:\Windows\system32> import-module WebAdministration
PS C:\Windows\system32> iis:
PS IIS:\> cd .\AppPools
PS IIS:\AppPools> ls
PS IIS:\AppPools> del [name of phantom AppPool]  

1
Это удаляет пулы приложений . Для удаления (фантомные) приложений, использовать подход из статьи , связанной в serverfault.com/questions/283467/...
bvgheluwe

1

Гораздо проще:

  1. Просмотрите устаревшее приложение X и запомните (старый) путь Y
  2. Создайте (старый) путь / папку Y с помощью Проводника
  3. Обновить консоль управления IIS
  4. Вы найдете только что созданную папку Y и назначенное приложение X
  5. Щелкните правой кнопкой мыши (старое) приложение X и выберите «Удалить».
  6. Удалить путь Y с помощью Проводника
  7. Снова обновите консоль управления IIS
  8. Ура

1

Дочерние приложения не удаляются автоматически, и диспетчер IIS не может отобразить их в дереве, так что это ваша проблема ...

Быстрый и надежный способ - использовать сценарий PowerShell для получения всех приложений, проверить, существует ли еще физический путь и, если нет, удалить приложение:

# This is for IIS 7, make sure the snap-in is installed first: https://www.iis.net/downloads/microsoft/powershell
Add-PSSnapin WebAdministration

# Get all IIS sites
Get-ChildItem IIS:\Sites | foreach {
    $site = $_;

    # Get all applications without existing physical path
    $applications = Get-ChildItem $site.PsPath | Where-Object { $_.NodeType -eq "application" -and (Test-Path $_.PhysicalPath) -eq $False };

    # List all phantom applications
    $applications | FT

    # Remove applications
    $applications | Remove-WebApplication -Site $site.Name
}

Небольшое исправление: IIS Manager может отображать фантомные приложения, выбрав узел «Пулы приложений» или «Сайты» и выбрав «Просмотр приложений» на appPool / site. Это позволяет только удалить из узла «Сайты»!
Рональд

Это отлично сработало для меня, хотя мне пришлось изменить «Add-PSSnapIn» на «Import-Module» на Server 2012 R2.
ldam

1

Существует простой способ исправить это.

  1. Выберите сайт с приложениями Phantom в пуле приложений.
  2. В правой части меню «Действие» выберите «Просмотр приложений». В этом списке должны отображаться все приложения, которые есть на сайте, фантомные или нет.
  3. Все, что вам нужно сделать, это выбрать приложение и выбрать «Удалить» в правом меню «Действие».

0

Почему бы не редактировать MetaBase.xml напрямую? Конечно, сделайте это до этого.

Или создайте пул «temp», переместите туда все другие приложения, удалите пул orig и переименуйте (при необходимости) новый пул.


4
Первая причина: потому что это IIS7, поэтому требуется редактирование ApplicationHost.config! Но я согласен, я не понимаю, почему это не просто «сначала добавить этот URL в другой пул приложений»?
TristanK

2
Спасибо за помощь. Сначала я переместил URL-адрес во временный пул, и это устраняет проблему с AppFabric. Тем не менее, я все еще не понимаю, как я могу удалить хитрое приложение, так как вы не можете удалить пул приложений, если у него есть приложения, использующие его, и я не могу удалить приложение из пула приложений
Кол.

0

Я сделал комбинацию из двух ответов, перечисленных выше, так как я не хотел повозить applicationHost.config вручную.

Шаг 1 - Создайте временный пул приложений - скажем, временный.

Шаг 2. Переместите все фантомные приложения в этот пул временных приложений.

Шаг 3 - Используйте Powershell из одного из ответов выше -

Powershell  
PS C:\Windows\system32> import-module WebAdministration
PS C:\Windows\system32> iis:
PS IIS:\> cd .\AppPools
PS IIS:\AppPools> ls
PS IIS:\AppPools> del [name of phantom AppPool]  

Вуаля!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.