Как правильно прочитать свойство AccessFlags, используя DirectoryServices на IIS 7.x? - PullRequest
1 голос
/ 15 октября 2010

У меня IIS 7.5 на Windows 7 x64 и IIS 7.0 на Windows 2008 SP2 x86.В обоих случаях были установлены все функции совместимости IIS 6.

В диспетчере IIS я создал виртуальный каталог с именем TestAccess с физическим путем

c:\inetpub\wwwroot\TestAccess

Я пытаюсь прочитатьсвойства AccessFlags, использующие код VB.NET, подобный следующему:

Dim de As New DirectoryEntry("IIS://localhost/W3SVC/1/Root/TestAccess")
Console.WriteLine(de.Properties("AccessRead").Item(0))
Console.WriteLine(de.Properties("AccessWrite").Item(0))
Console.WriteLine(de.Properties("AccessExecute").Item(0))
Console.WriteLine(de.Properties("AccessSource").Item(0))
Console.WriteLine(de.Properties("AccessScript").Item(0))

К сожалению, этот код, кажется, захватывает (унаследованную) информацию из

c:\Windows\System32\inetsrv\config\applicationHost.config

, но если я войду в IIS Manager,выберите виртуальный каталог, выберите «Сопоставления обработчиков», нажмите «Редактировать разрешения функций» и внесите любые изменения. Фактические изменения записываются в

c:\inetpub\wwwroot\TestAccess\web.config

Если не DirectoryServices, какой код инструментария следует использовать для получения комбинированного представленияapplicationHost.config и файлы web.config определенного каталога, чтобы я мог прочитать эффективные значения этих свойств?Я бы предпочел что-то, что работает с IIS 6.0 и 7.x.

1 Ответ

2 голосов
/ 15 октября 2010

Как вы знаете, System.DirectoryServices биты обертывают слой совместимости IIS6.0.Но уровень совместимости просто обеспечивает сопоставление с функциями, которые поддерживаются только в IIS6.

IIS6 не имел реальных знаний о ASP.NET, кроме того, что это сопоставление сценария с одним или двумя фильтрами ISAPI (и незначительное обновлениев MMC IIS, чтобы разрешить массовое переключение сценариев из одной версии ASP.NET в другую).

IIS6 хранит большую часть своей конфигурации в метабазе, поэтому API-интерфейсы предназначены для управления хранилищем метабазы.Метабаза IIS6 не знает ASP.NET и web.config, опять же ASP.NET - это просто карта сценариев.

В файле web.config сайта никогда не было никаких настроек для управления IIS6.IIS 6 не использует этот файл, поэтому уровень совместимости также не учитывает и не учитывает дополнительные параметры, которые могут быть настроены в разделе <system.webServer> файла web.config сайта.

IIS6Слой совместимости эмулирует метабазу, изменяя эквивалентные настройки только в applicationHost.config.

IIS7 изменяет игру и настройки в файлах web.config (в разделе <system.webServer> теперь ассимилируется в общую конфигурацию среды выполнения сайта).когда он запускается.

Итак, если вы хотите получить агрегированное представление конфигурации сайта IIS7, вам нужно будет использовать новые управляемые API Microsoft.Web.Administration и Microsoft.Web.Management. Вы также можете использовать appcmd.exe инструмент настройки командной строки.

Используя эти инструменты, вы можете указать, где вы хотите прочитать или изменить настройки, например, на уровне Application Host или на уровне локального сайта.

Это должноСледует отметить, что многие параметры всегда считаются наследуемыми, если они не переопределены файлом конфигурации с болееc местоположение (например, сайт или подкаталог).

Консоль IIS7 MMC имеет тенденцию помещать изменения (например, отображения обработчиков, типы MIME и т. д.) в локальный файл web.config сайта.Если вам нужно убедиться, что эти изменения более постоянны и не подвержены риску удаления, вы можете зафиксировать их в файле applicationHost.config, но вам нужно использовать либо appcmd.exe (с переключателем /commit:apphost, либо работать с управляемымAPI используют такие инструменты, как VB.NET, C # или PowerShell.

...