Пути конфигурации IIS 7 - PullRequest
       31

Пути конфигурации IIS 7

2 голосов
/ 24 января 2011

Я пытаюсь сделать мое приложение c ++ ahadmin совместимым с IIS 7. Моему приложению необходимо прочитать конфигурацию веб-сайтов (через свойства метабазы ​​в IIS 6).

Я прочитал много статей о путях конфигурации, и я думаю, что у меня есть хорошее представление о том, как это работает - однако я не уверен в одном:

Чтобы перейти к конфигурации,Я могу либо зафиксировать путь MACHINE / WEBROOT / APPHOST /, либо веб-сайт MACHINE / WEBROOT / APPHOST / Default.

Я понимаю, что последний относится к фактическому web.config конкретного веб-сайта, а первый относится к общему файлу applicationHost.config, в котором установлены общие настройки.

Однако мое приложение не знает, существует ли файл web.config.

Мой вопрос: если я хочу попасть по этому пути - Object.ConfiguredObject.Site.Bindings, нужно ли фиксировать путь APPHOST или APPHOST/Default Web Site?

Откуда мне это знать во время выполнения?

Ответы [ 2 ]

1 голос
/ 25 января 2011

Звучит так, как будто вы пытаетесь создать универсальный инструмент для управления конфигурацией, и поэтому вы можете захотеть придерживаться того же шаблона, что и IIS Manager;короче говоря, он всегда пытается сохранить конфигурацию на максимально возможный путь.Это означает, что он всегда будет фиксировать его там, где он может, посмотрев, заблокирован ли раздел или нет.Он использует управляемый код (Microsoft.Web.Administration), но вы можете получить доступ к тем же данным из C ++, используя AppHostElement.GetMetadata ("isLocked").Кстати, если вы используете C ++, я НАСТОЯТЕЛЬНО рекомендую использовать AHADMIN напрямую (а не WMI или что-либо еще), в частности IAppHostWritableAdminManager .

Таким образом, алгоритм будет устанавливатьCommitPath с тем же значением, что и указанный путь конфигурации GetAdminSection.Затем проверьте IsLocked, если это так, затем удалите последнюю «часть пути» (обрезать, начиная с последней '/'), и читайте снова, пока не найдете место, где раздел разблокирован.Это самое глубокое место, где вы можете его спасти.Кроме того, вам необходимо переключиться на MACHINE / WEBROOT в какой-то момент, если это раздел system.web.IsLocked будет уважать такие вещи, как определение раздела, разрешить местоположение и другие необходимые вещи.Если вы хотите сделать это пуленепробиваемым, вам даже нужно проверить блокировку на уровне атрибутов, но я думаю, что это довольно продвинутое.

1 голос
/ 24 января 2011

Вы всегда будете фиксировать свои привязки на MACHINE/WEBROOT/APPHOST.

Вам следует взглянуть на файлы схемы в:

%systemroot%\System32\inetsrv\config\schema

Они помогут вам определить, где должны находиться настройки.

Обновление:

За ваш комментарий:

Так, например,AccessSSLFlags будет сопоставлен с ConfigurationSection.AccessSection.SslFlags - какой раздел я буду фиксировать в этом случае?Как узнать, какой раздел мне нужно зафиксировать?

Все зависит.IIS7 поддерживает механизм под названием делегирование функций .Если функция делегирована, это означает, что пользователь может настроить эту функцию в своем локальном web.config.Некоторые функции настраиваются в system.webServer, другие system.web.

То, что пользователь может и не может настроить локально в его / ее web.config, контролируется записями в двух файлах:

%systemrooot%\system32\inetsrv\config\administration.config
%systemrooot%\system32\inetsrv\config\applicationHost.config

Если вы посмотрите на схему конфигурации IIS7 в:

%systemroot%\System32\inetsrv\config\schema\IIS_schema.xml

Чтовы обнаружите, что существует два основных типа раздела:

system.applicationHost/xxxx
system.webServer/xxxx

Все, что настраивается в system.applicationHost,как правило, не считается изменяемым пользователем элементом конфигурации.На самом деле, если вы откроете applicationHost.config, вы увидите:

<sectionGroup name="system.applicationHost">
  <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
</sectionGroup>

Обратите внимание на allowDefinition="AppHostOnly"?По сути, это говорит о том, что эти параметры нельзя настроить в web.config.

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

...