Исключение 0x8000500F возникает при попытке создать виртуальный каталог в IIS с использованием C # - PullRequest
2 голосов
/ 13 июля 2011

Я пытаюсь программно создать виртуальный каталог в IIS, используя C #

Вот пример кода

DirectoryEntry iisVDir = new DirectoryEntry("IIS://localhost/W3SVC/1/Root/main");
DirectoryEntry configVDir = iisVDir.Children.Add("config", "IIsWebVirtualDir");
configVDir.CommitChanges();

Однако при запуске кода я получаю следующую ошибку во второй строке

Exception from HRESULT: 0x8000500F

Однако, когда я пытаюсь повторить код, но при создании виртуального каталога в папке Root , в отличие от Root / main , это работает. main папка существует, и я могу вручную добавить в нее виртуальный каталог через консоль управления IIS в Windows.

Когда я запускал код через отладчик, я заметил, что iisVDir DirectoryEntry имеет имя_схемы_класса IISObject , а не IISWebDirectory , как и следовало ожидать. Я повторил приведенный выше код для другой существующей папки, которая была IISWebDirectory , а не IISObject , и она работала.

Я знаю, что вы можете изменить IISWebDirectory на IIsWebVirtualDir , но вы можете изменить IISObject на IISWebDirectory ?

Я использую IIS 5.1 в Windows XP.

РЕДАКТИРОВАТЬ: я воссоздал, как была настроена «основная» папка.

  1. В проводнике Windows создайте новую папку с именем maintest , например, в папке C: \ inetpub \ wwwroot
  2. В консоли управления IIS перейдите к этой новой папке, щелкните ее правой кнопкой мыши, чтобы вызвать контекстное меню, и создайте в ней новый виртуальный каталог, например, под названием config (я указал на C: \ Temp в моем случае)
  3. При попытке создать виртуальный каталог в новой папке maintest , однако, используя приведенный выше пример кода, папка maintest выглядит как IISObject

Так, может быть, это IISObject, но как мне создать виртуальный каталог под ним программно?

Ответы [ 3 ]

0 голосов
/ 14 июля 2011

Я частично разработал решение для создания виртуального каталога.

Как описано в редактировании, проблема возникла при попытке добавить виртуальный каталог в папку, которая хранится в метабазе IIS как IISObject.

Я думаю, что происходит, когда вы добавляете виртуальный каталог в обычную папку 'windows' с помощью консоли управления IIS, папку windows тоже нужно добавить в метабазу, но она не будет иметь никаких собственные свойства. Я считаю, что именно поэтому он добавляется как IISObject . Если вам нужно перейти в консоль управления IIS и установить некоторые свойства для папки, то она станет IISWebDirectory .

Как я обнаружил, я мог добавить виртуальный каталог в свою главную папку, хотя это все еще был IISObject , хотя и должен был добавить виртуальный каталог в качестве дочернего для корневой папки, но измените имя виртуального каталога, чтобы оно включало в свое имя папку main , например

DirectoryEntry iisVDir = new DirectoryEntry("IIS://localhost/W3SVC/1/Root");
DirectoryEntry configVDir = iisVDir.Children.Add("main/config", "IIsWebVirtualDir");
configVDir.CommitChanges();

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

0 голосов
/ 20 декабря 2012

Убедитесь, что установлена ​​совместимость конфигурации IIS Metabase и IIS 6.

Для проверки: Перейдите в Пуск-> Панель управления-> Программы и компоненты -> Включить или отключить функции Windows -> Информационные службы Интернета -> Инструменты управления веб-интерфейсом -> Совместимость управления IIS6

В списке вы найдете параметр «Совместимость конфигурации IIS Metabase и IIS 6».

Если это не установлено, установите эту функцию и попробуйте ввести код.

Удачи.

Продолжай улыбаться ...:)

0 голосов
/ 13 июля 2011

Я был в такой ситуации в ASP.NET. Я прошел долгую отладку этих ошибок COM, которые я видел некоторое время назад.

В моем случае, когда вы создаете такие изменения в каталоге сайта (приложения), это вызывает немедленный перезапуск самого себя. Эта функциональность добавлена ​​для того, чтобы приложение / веб-сайт располагали самым последним содержимым, как я тогда читал.

Вы можете протестировать и найти его, переместив целевой каталог за пределы текущего веб-сайта, тем самым вы будете знать источник проблемы - поэтому вам нужно будет реализовать целевой объект за пределами текущего веб-сайта (я исправил проблему с двумя веб-сайтами), пока хранилище перезагружается, контроллер остается активным.

Скажите, истекает ли ошибка COM при перемещении каталога наружу, или подождите некоторое время, пока IIS перезапустится (10-20 секунд).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...