Изменить пользовательский раздел конфигурации в 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.
Создайте файл с именем
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>
Возьмите копию инструмента под названием
IisSchema.exe
отсюда:IISSCHEMA.EXE - инструмент для регистрации разделов конфигурации IIS7
Разархивируйте и убедитесь, что как exe, так и XML-файл схемы находятся в одной папке.
Из командной строки администратора (т.е. открыть
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. Я пытаюсь докопаться до этого:
Обновление 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. Вы упоминаете, что у вас есть кандидат на релиз, поэтому ваш пробег может варьироваться из-за этого.