我正在开发大型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.
答案 0 :(得分:21)
是的,有一种方法可以通过扩展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 - A tool to register IIS7 configuration sections
解压缩并确保exe和xml架构文件都在同一个文件夹中。
从管理员命令行(即使用“以管理员身份运行”打开cmd.exe
):
IISSCHEMA.EXE /install RegistriesSchema.xml
这将做两件事:
%systemroot%\system32\inetsrv\config\schema
将以下XML添加到applicationHost.config
:
<section name="RegistriesCustomSettings" overrideModeDefault="Allow" allowDefinition="Everywhere" />
4。启动IIS管理器并打开网站的功能设置并打开配置编辑器:
5。选择Section下拉列表:
如果一切顺利,您应该看到“RegistriesCustomSettings”,选择此项。
6。您现在可以编辑这些设置,它们将被添加到您网站的web.config
文件中:
这只是一个演示,因此架构设置可能不太正确,可能需要一些微调。
如何处理<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上进行了测试。你提到你正在运行一个候选版本,所以你的里程可能因此而有所不同。