【问题标题】:Edit config custom section in IIS在 IIS 中编辑配置自定义部分
【发布时间】:2011-04-21 21:56:40
【问题描述】:

我正在开发由 5 个不同的网站和一些共享程序集组成的大型 ASP.NET 项目(我们使用 ASP.NET 3.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。

【问题讨论】:

  • @victor - 抱歉,一些(早该)的假期和最近的疯狂工作安排让我没有太多时间进一步调查。
  • @kev - 没问题,狂躁的工作日程听起来很熟悉,希望你不要压力太大。我有一些进一步的观察/结论(见我的下一个问题),所以当你有机会回到这个问题时,我会告诉你。
  • @victor - 我在 MS IIS 论坛上提出了这个问题,希望像 @CarlosAg 这样的微软工程师会注意到 :)。 forums.iis.net/t/1178006.aspx
  • @kev - 有趣的是我也在那里发帖forums.iis.net/t/1178021.aspx 但你制定得更好,所以我可能会把我的记下来。当然,如果在此之前我得到任何回复,我会通知您。再次感谢所有帮助。
  • @kev - 顺便说一句,我已经看到了一些将添加的自定义部分放在system.web 中的示例。我不认为这是问题所在,但可以尝试一下。

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


【解决方案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 - 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

4 .启动 IIS 管理器并打开您网站的功能设置并打开配置编辑器:

5 .选择部分下拉列表:

如果一切正常,您应该会看到“RegistriesCustomSettings”,请选择此项。

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

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

如何处理&lt;sectionGroup name="RegistriesCustomSettings"&gt;?:

您仍然需要为每个站点将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 配置编辑器中似乎存在错误或限制。看来,如果您在站点的 web.config 文件中有自己的自定义 configSections &lt;sectionGroup&gt;&lt;section&gt; 声明,这会破坏 IIS7.5 配置编辑器。我正在努力解决这个问题:

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


更新 2:

我认为这方面的 MS 文档有点虚假,特别是在您的自定义配置部分需要由 ASP.NET 使用并且可以在 IIS 管理器配置编辑器中编辑的情况下。诀窍似乎是在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 架构的更多信息:

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 上进行了测试。您提到您正在运行一个候选版本,因此您的里程可能会因此而有所不同。

【讨论】:

  • 非常感谢您提供如此详细的答案和我的帖子编辑。我明天试一试。仔细一看,我们使用的是 IIS 7.0 Integrated on Windows 2008 sp2 x32。这应该有什么显着的区别吗?
  • 应该没什么区别,IISSchema 工具是在 2008 RTM 处于测试阶段或刚刚发布时编写的。
  • 关于架构设置有没有可以找到所有设置列表的地方?
  • 奇怪,我成功运行了自定义工具,它删除了一个新架构并在 applicationHost.config 文件中添加了一个部分,但该部分在 app 文件夹下显示为不可编辑。还有什么需要做的吗?
  • @victor - 当你说“在应用程序文件夹下不显示为可编辑”时 - 你可以扩展吗?
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 2010-11-12
  • 2013-09-17
  • 2011-07-04
相关资源
最近更新 更多