Edit config custom section in IIS

帅比萌擦擦* 提交于 2019-11-30 05:17:43
Kev

Yes there is a way to do this by extending the IIS configuration schema.

  1. Create a file called RegistriesSchema.xml and copy and paste the following 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. Grab a copy of a tool called IisSchema.exe from here:

    IISSCHEMA.EXE - A tool to register IIS7 configuration sections

    Unzip and make sure both the exe and the xml schema file are in the same folder.

  3. From an administrator command line (i.e. open cmd.exe using "Run As Administrator"):

    IISSCHEMA.EXE /install RegistriesSchema.xml

    This will do two things:

    • drops the schema file into %systemroot%\system32\inetsrv\config\schema
    • adds the following XML to applicationHost.config:

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

4 . Launch IIS Manager and open the feature settings for your website and open the Configuration Editor:

5 . Select the Section drop down list:

If all is good you should see "RegistriesCustomSettings", select this item.

6 . You can now edit these settings and they'll be added to your site's web.config file:

This is just a demonstration so the schema settings may not be quite right and will probably need some fine tuning.

What To Do With <sectionGroup name="RegistriesCustomSettings">?:

You will still need to add the configSection/sectionGroup xml to your web.config file for each site or you could add it to the root machine.config file for whatever version of ASP.NET you're using, i.e.:

For .NET Framework 2.0 (which also applies to .NET3.0 and 3.5):

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

For .NET Framework 4.0:

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

If you put your assembly's configSection/sectionGroup in your machine.config file(s) then you don't need to declare it in every site's web.config. If quite a few sites are going to be using this assembly then this may be good timesaver.

Update:

There seems to be a bug or limitation in the IIS7.5 Configuration Editor. It appears that if you have your own custom configSections <sectionGroup> or <section> declarations in your site's web.config file this breaks the IIS7.5 Configuration Editor. I'm trying to get to the bottom of this:

ASP.NET custom configuration section declaration breaks IIS Manager Configuration Editor


Update 2:

I think the MS docs on this are a bit bogus particularly where your custom config section needs to be consumable by ASP.NET and editable in the IIS Manager Configuration Editor. The trick seems to be to declare the schema as follows in the RegistriesSchema.xml file:

<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>

Also, and importantly, remove the section reference from applicationHost.config:

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

This is not required.

Additionally, you don't actually need to use the iisschema.exe tool, just grab a copy of NotePad2 (it's a 64bit editor, you need this to edit anything in inetsrv\config) and create the RegistriesSchema.xml file directly in inetsrv\config\schema.


You can find out more about extending the IIS7 schema here:

Extending IIS 7.0 Schema and Accessing the Custom Sections Using MWA

You can poke about the existing schema files to learn more about how to construct these settings. They can be found in:

%systemroot%\system32\inetsrv\config\schema

Caveat: The example above was tested on IIS7.5 x64 RTM on Windows 7 x64 Ultimate. You mention that you're running a release candidate so your mileage may vary because of that.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!