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

#asp.net #iis-7 #asp.net-3.5

#asp.net #iis-7 #asp.net-3.5

Вопрос:

Я работаю над большим 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. @victor — прошу прощения, несколько (давно просроченных) выходных и напряженный график работы прямо сейчас не дали мне много времени для дальнейшего изучения этого вопроса.

2. @kev — вообще никаких проблем, безумный график работы звучит очень знакомо, надеюсь, вы не слишком напрягались. У меня есть некоторые дополнительные наблюдения / выводы (см. Мой следующий вопрос), поэтому, когда у вас появится возможность вернуться к этой проблеме, я дам вам знать.

3. @victor — Я поднял этот вопрос на форумах MS IIS, надеюсь, инженер Microsoft, такой как @CarlosAg, заметит :). forums.iis.net/t/1178006.aspx

4. @kev — забавно, что я тоже там разместил forums.iis.net/t/1178021.aspx но вы сформулировали это лучше, поэтому я, вероятно, удалю свой. Конечно, я дам вам знать, если получу какой-либо ответ до этого. Еще раз спасибо за всю помощь.

5. @kev — кстати, я видел несколько примеров, когда добавленный пользовательский раздел помещался внутрь system.web . Я не думаю, что проблема в этом, но могу попробовать.

Ответ №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%system32inetsrvconfigschema
    • добавляет следующий XML в applicationHost.config :

      <название раздела="RegistriesCustomSettings" 
       overrideModeDefault="Разрешить" 
       allowDefinition="Везде" />

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

введите описание изображения здесь

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.NETFramework v2.050727CONFIGmachine.config
%systemroot%Microsoft.NETFramework64v2.050727CONFIGmachine.config

Для .NET Framework 4.0:

%systemroot%Microsoft.NETFrameworkv4.0.30319CONFIGmachine.config
%systemroot%Microsoft.NETFramework64v4.0.30319CONFIGmachine.config

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

Обновить:

Похоже, что в редакторе конфигурации IIS7.5 есть ошибка или ограничение. Похоже, что если у вас есть собственные пользовательские объявления configSections <sectionGroup> or <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-разрядный редактор, он нужен вам для редактирования чего-либо inetsrvconfig ) и создайте RegistriesSchema.xml файл непосредственно в inetsrvconfigschema .


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

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

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

%systemroot%system32inetsrvconfigschema

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

Комментарии:

1. Большое спасибо за такой подробный ответ и правки моего поста. Я попробую это завтра. После более тщательного изучения мы используем IIS 7.0, интегрированный в Windows 2008 с пакетом обновления 2 x32. Должно ли это иметь какое-либо заметное значение?

2. Не должно иметь большого значения, инструмент IISSchema был написан, когда RTM 2008 был либо в бета-версии, либо только что выпущен.

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

4. странно, я успешно запустил пользовательский инструмент, и он удалил новую схему и добавил раздел в файл applicationHost.config, но раздел не отображается как редактируемый в папке приложения. Нужно ли сделать что-нибудь еще?

5. @victor — когда вы говорите «не отображается как редактируемое в папке приложения» — можете ли вы расширить?