Изменить пользовательский раздел конфигурации в IIS - PullRequest
8 голосов
/ 22 апреля 2011

Я работаю над большим проектом ASP.NET (мы используем ASP.NET 3.5), который состоит из 5 различных веб-сайтов и некоторых общих сборок. Недавно я добавил пользовательский раздел в web.config файлы для каждого сайта. При развертывании всех этих приложений каждый сайт развертывается отдельно в рамках одного пула приложений. Есть ли способ сделать этот раздел редактируемым в IIS на уровне сайта, как вы можете редактировать ConnectionString раздел для каждого сайта?

Разделы, которые я добавил, выглядят так:

<sectionGroup name="RegistriesCustomSettings">
  <section name="RegistriesSettings" 
           type="Registries.Business.Utilities.RegistriesConfigurations"/>
</sectionGroup >

<RegistriesCustomSettings>
    <RegistriesSettings ContextCommandTimeout="30" 
           logLinq="true" DisplayUser="true" BaseReportPath="/DDD/" 
           ReportingServer="http://patriot-regdev:8000/ReportServer"
           TopInstitution="1000001" />
</RegistriesCustomSettings>

Мы используем IIS 7.0, 2008 RC 2.

1 Ответ

21 голосов
/ 22 апреля 2011

Да, есть способ сделать это, расширив схему конфигурации IIS.

  1. Создайте файл с именем RegistriesSchema.xml, скопируйте и вставьте следующий XML:

    <configSchema>
        <sectionSchema name="RegistriesCustomSettings">
            <element name="RegistriesSettings">
                <attribute name="ContextCommandTimeout" 
                           type="int" 
                           validationType="integerRange" 
                           validationParameter="1,600" 
                           allowInfinite="true" 
                           defaultValue="30" />
                <attribute name="logLinq" 
                           type="bool" 
                           defaultValue="True" />
                <attribute name="DisplayUser" 
                           type="bool" 
                           defaultValue="True" />
                <attribute name="BaseReportPath" 
                           type="string" 
                           validationType="nonEmptyString" />
                <attribute name="ReportingServer" 
                           type="string" 
                           validationType="nonEmptyString" />
                <attribute name="TopInstitution" 
                           type="string" 
                           validationType="nonEmptyString" />
            </element>
        </sectionSchema>
    </configSchema>
    
  2. Получите копию инструмента под названием IisSchema.exe отсюда:

    IISSCHEMA.EXE - инструмент для регистрации разделов конфигурации IIS7

    Разархивируйте и убедитесь, что exe и файл схемы xml находятся в одной папке.

  3. Из командной строки администратора (то есть откройте cmd.exe, используя«Запуск от имени администратора»):

    IISSCHEMA.EXE /install RegistriesSchema.xml

    Это сделает две вещи:

    • перетаскивает файл схемы в %systemroot%\system32\inetsrv\config\schema
    • добавляет следующий XML к applicationHost.config:

      <section name="RegistriesCustomSettings" 
                   overrideModeDefault="Allow" 
                   allowDefinition="Everywhere" />

4.Запустите диспетчер IIS, откройте настройки функций для своего веб-сайта и откройте редактор конфигурации:

enter image description here

5.Выберите раскрывающийся список Раздел:

enter image description here

Если все хорошо, вы должны увидеть «RegistriesCustomSettings», выберите этот пункт.

6.Теперь вы можете редактировать эти настройки, и они будут добавлены в файл web.config вашего сайта:

enter image description here

Это просто демонстрация, поэтому настройки схемы могут быть не совсем верными ивероятно, потребуется некоторая подстройка.

Что делать с <sectionGroup name="RegistriesCustomSettings">?:

Вам все равно потребуется добавить configSection/sectionGroup xml в файл web.config для каждого сайта или вы можете добавить его в корневой файл machine.config для любой версии ASP.NET, которую вы используете, например:

Для .NET Framework 2.0 (что также относится к .NET3.0 и3.5):

%systemroot%\Microsoft.NET\Framework\v2.050727\CONFIG\machine.config
%systemroot%\Microsoft.NET\Framework64\v2.050727\CONFIG\machine.config

Для .NET Framework 4.0:

%systemroot%\Microsoft.NET\Framework\v4.0.30319\CONFIG\machine.config
%systemroot%\Microsoft.NET\Framework64\v4.0.30319\CONFIG\machine.config

Если вы поместили configSection/sectionGroup вашей сборки в ваши файлы machine.configтогда вам не нужно объявлять это на каждом сайте web.config.Если довольно много сайтов будут использовать эту сборку, то это может помочь сэкономить время.

Обновление:

Кажется, в IIS7 есть ошибка или ограничение.5 Редактор конфигурации.Похоже, что если у вас есть собственные пользовательские объявления configSections <sectionGroup> или <section> в файле web.config вашего сайта, это нарушает работу редактора конфигурации IIS7.5.Я пытаюсь разобраться в этом:

Разрыв объявления раздела пользовательской конфигурации ASP.NET Редактор конфигурации IIS Manager


Обновление 2:

Я думаю, что документы MS по этому вопросу являются немного фальшивыми, особенно в тех случаях, когда ваш настраиваемый раздел конфигурации должен использоваться ASP.NET и редактироваться в редакторе конфигурации IIS Manager.Хитрость заключается в том, чтобы объявить схему следующим образом в файле RegistriesSchema.xml:

<configSchema>
    <sectionSchema name="RegistriesCustomSettings/RegistriesSettings">
        <attribute name="ContextCommandTimeout" 
                   type="int" 
                   validationType="integerRange" 
                   validationParameter="1,600" 
                   allowInfinite="true" 
                   defaultValue="30" />
        <attribute name="logLinq" 
                   type="bool" 
                   defaultValue="True" />
        <attribute name="DisplayUser" 
                   type="bool" 
                   defaultValue="True" />
        <attribute name="BaseReportPath" 
                   type="string" 
                   validationType="nonEmptyString" />
        <attribute name="ReportingServer" 
                   type="string" 
                   validationType="nonEmptyString" />
        <attribute name="TopInstitution" 
                   type="string" 
                   validationType="nonEmptyString" />
    </sectionSchema>
</configSchema>

Кроме того, и, что важно, удалите ссылку на раздел из applicationHost.config:

<section name="RegistriesCustomSettings" 
         overrideModeDefault="Allow" 
         allowDefinition="Everywhere" />

Это не обязательно.

Кроме того, вам на самом деле не нужно использовать инструмент iisschema.exe, просто возьмите копию NotePad2 (это 64-битный редактор, вам нужно это отредактировать в inetsrv\config)и создайте файл RegistriesSchema.xml непосредственно в inetsrv\config\schema.


Подробнее о расширении схемы IIS7 можно узнать здесь:

Расширение схемы IIS 7.0Доступ к пользовательским разделам с помощью MWA

Вы можете изучить существующие файлы схемы, чтобы узнать больше о том, как создать эти параметры.Их можно найти в:

%systemroot%\system32\inetsrv\config\schema

Предупреждение: приведенный выше пример был протестирован на IIS7.5 x64 RTM на Windows 7 x64 Ultimate.Вы упоминаете, что у вас есть кандидат на релиз, поэтому ваш пробег может варьироваться из-за этого.

...