在IIS中编辑配置自定义部分

时间:2011-04-21 21:56:40

标签: asp.net iis-7 asp.net-3.5

我正在开发大型ASP.NET项目(我们使用ASP.NET 3.5),它包含5个不同的WebSite和一些共享程序集。最近,我为每个站点的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 个答案:

答案 0 :(得分:21)

是的,有一种方法可以通过扩展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 - A tool to register IIS7 configuration sections

    解压缩并确保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. 4。启动IIS管理器并打开网站的功能设置并打开配置编辑器:

    enter image description here

    5。选择Section下拉列表:

    enter image description here

    如果一切顺利,您应该看到“RegistriesCustomSettings”,选择此项。

    6。您现在可以编辑这些设置,它们将被添加到您网站的web.config文件中:

    enter image description here

    这只是一个演示,因此架构设置可能不太正确,可能需要一些微调。

    如何处理<sectionGroup name="RegistriesCustomSettings">?:

    您仍然需要将configSection/sectionGroup xml添加到每个网站的<{1}}文件,您可以将其添加到根web.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

    如果您将程序集的machine.config放在configSection/sectionGroup文件中,则无需在每个网站的machine.config中声明它。如果有不少网站将使用这个程序集,那么这可能是一个很好的节省时间。

    <强>更新

    IIS7.5配置编辑器中似乎存在错误或限制。看来,如果您在网站的web.config文件中拥有自己的自定义configSections <sectionGroup><section>声明,则会破坏IIS7.5配置编辑器。我试图深究这一点:

      

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


    更新2:

    我认为这方面的MS文档有点虚假,特别是在自定义配置部分需要ASP.NET可以使用并且在IIS管理器配置编辑器中可编辑的情况下。诀窍似乎是在web.config文件中声明模式如下:

    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" /> 工具,只需抓取NotePad2的副本(它是64位编辑器,您需要这个来编辑iisschema.exe中的任何内容)并创建{ {1}}直接在inetsrv\config

    中归档

    您可以在此处找到有关扩展IIS7架构的更多信息:

      

    Extending IIS 7.0 Schema and Accessing the Custom Sections Using MWA

    您可以查看现有的架构文件,以了解有关如何构建这些设置的更多信息。它们可以在:

    找到
    %systemroot%\system32\inetsrv\config\schema

    警告:上面的示例在Windows 7 x64 Ultimate上的IIS7.5 x64 RTM上进行了测试。你提到你正在运行一个候选版本,所以你的里程可能因此而有所不同。