Странное поведение в IIS 7.0 - System.DirectoryServices - PullRequest
0 голосов
/ 22 января 2009

Я столкнулся со странной проблемой в IIS 7.0:

У меня есть следующий виртуальный каталог в IIS: alt text

и только виртуальный каталог Windows включен в режиме IIS

Теперь, если я попытаюсь связать DirectoryEntry для TestV / Folder / file.aspx следующим образом:

string vDir = @"/TestV/folder/file.aspx";

            DirectoryEntry dir = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/ROOT" + vDir, @"adminusername", @"password");
            dir.AuthenticationType = AuthenticationTypes.Secure;

            try
            {
                Console.WriteLine(dir.Name);
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }

            Console.WriteLine("");

Я получаю исключение: «Системе не удается найти указанный путь»

Теперь, если я вернусь в IIS и затем выполню следующие шаги: Щелкните правой кнопкой мыши TestV / Folder и включите режим анонимной аутентификации, а затем снова отключите его

Щелкните правой кнопкой мыши TestV / Folder / file.aspx и включите режим анонимной аутентификации, а затем снова отключите его

По сути, я только что выполнил некоторый ручной доступ к aspx-файлу Testv / Folder / file.aspx.

После выполнения описанных выше шагов, если я запустил программу, код успешно сможет получить доступ к записи каталога и успешно напечатает имя (file.aspx)

В чем здесь проблема?

Еще одна информация:

Я также вижу это поведение в IIS 6.0. Таким образом, это выглядит как до тех пор, пока я не выполню ручную операцию в IIS для папки / файла в виртуальном каталоге, он не создаст соответствующие метаданные в активном каталоге?

Ответы [ 3 ]

1 голос
/ 27 января 2009

Я получил ответ на проблему (с некоторой помощью одного из моих коллег)

Вот решение: 1. Программа должна добавить (псевдо?) Записи в метаданные IIS, прежде чем она получит доступ к файлу / папке в виртуальном каталоге, прежде чем мы получим доступ к записи:

try
            {
                // make pseudo entries:
                DirectoryEntry folder = rootDir.Children.Add("Folder", "IISWebDirectory");
                folder.CommitChanges();
                file = folder.Children.Add("File.aspx", "IISWebFile");
                file.CommitChanges();
            }

Тогда вуаля это работает

PS:

DirectoryEntry dir = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/ROOT" + vDir, @"adminusername", @"password");
dir.AuthenticationType = AuthenticationTypes.Secure;
dir.RefreshCache();

Directory.Refresh не помогает

0 голосов
/ 22 января 2009

Хотя это не совсем ответ, я бы отметил, что System.DirectoryServices обычно не используется для взаимодействия с IIS. Хотя это может дать вам доступ к настройкам IIS, WMI, как правило, является лучшим выбором.

0 голосов
/ 22 января 2009

Поможет ли вам вызов RefreshCache () сразу после третьей строки?

DirectoryEntry dir = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/ROOT" + vDir, @"adminusername", @"password");
dir.AuthenticationType = AuthenticationTypes.Secure;
dir.RefreshCache();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...