Изменить пользовательский раздел конфигурации в IIS

Я работаю над большим проектом 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 ответ

Решение

Да, есть способ сделать это путем расширения схемы конфигурации 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 / установить RegistriesSchema.xml 

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

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

       

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

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

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

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

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

Что делать с <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 \ схема 

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

Другие вопросы по тегам