Web.Config回归Web Farm中的Global Config

Rob*_*per 1 asp.net configuration web-config web-farm

这个问题让我们几个人在办公室里难过.我们都是将ASP.NET应用程序部署到Web服务器场的新手,我对这些想法很感兴趣.

我们有一个Web场,应用程序被复制到所有这些场.但是,我们遇到了问题..

尝试从中获取设置时会抛出异常appSettings.经过进一步调查,事实证明该节点实际上并没有使用本地,Web.Config但它回退到Web.Config.NET框架文件夹中(我们通过在那里添加密钥证明了这一点,它出现在测试页面上).

我必须遗漏一些东西,因为我的理解是,只要文件存在,IIS就应该使用它!其中一台服务器似乎工作正常!

这是我们确认的清单:

  • 配置文件位于app目录中.
  • 所述文件的内容是正确的.
  • 从IIS>站点>属性> ASP.NET>编辑配置查看文件时,将显示正确的内容.

但是,在运行时,使用的文件是全局文件(windows\ms .net\framework\v2\config\web.config).

任何人都有什么可能出错的建议吗?感谢我能得到的所有帮助!

谢谢.

spl*_*tne 6

这是ASP.NET配置的层次结构.也许这有助于了解哪些设置会相互覆盖.

服务器

Machine.config:Machine.config文件包含服务器上所有Web应用程序的ASP.NET架构.此文件位于配置合并层次结构的顶部.

根网

Web.config:服务器的Web.config文件存储在与Machine.config文件相同的目录中,并包含大多数system.web配置节的默认值.在运行时,此文件在配置层次结构中从顶部合并到第二位.

网站

Web.config:特定网站的Web.config文件包含适用于网站的设置,并通过网站的所有ASP.NET应用程序和子目录向下继承.

ASP.NET应用程序根目录

Web.config:特定ASP.NET应用程序的Web.config文件位于应用程序的根目录中,包含适用于Web应用程序的设置,并通过其分支中的所有子目录向下继承.

ASP.NET应用程序子目录

Web.config:应用程序子目录的Web.config文件包含适用于此子目录的设置,并通过其分支中的所有子目录向下继承.

客户端应用目录

ApplicationName.config:ApplicationName.config文件包含Windows客户端应用程序(不是Web应用程序)的设置.


了解通过文件夹和应用程序继承哪些ASP.NET文件和文件夹对于开发和故障排除非常重要.

这是一个简短的总结:

  • web.config文件一直沿着树继承,超过所有应用程序边界.
  • global.asax仅存在于其应用程序中
  • / bin和/ app_ {文件夹}仅存在于其应用程序中

因此,这意味着根web.config文件中设置的任何内容都将继承整个站点,即使某些文件夹被标记为应用程序也是如此.

如果web.config文件引用了程序集但子应用程序没有这些程序集,那么这会变得混乱.例如,假设您在站点的根目录中配置了HTTP模块,并从站点web.config文件中引用.如果您有一个名为/ subfolder的子应用程序被标记为应用程序,则/ subfolder将尝试从/ subfolder/bin加载HTTP Handler.由于它不存在,将引发错误.

有很多方法可以解决这个问题.如果/子文件夹中不需要HTTP处理程序,最干净的可能是通过在/subfolder/web.config文件中添加一个子句来"删除"引用.你可以这样做.以下是如何删除子文件夹中的HTTP模块的示例:

<httpModules>
  <remove name="ErrorLog"/>
</httpModules>
Run Code Online (Sandbox Code Playgroud)

以下是web.config站点的外观:

<httpModules>
      <add name="ErrorLog"  type="GotDotNet.Elmah.ErrorLogModule, GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral, PublicKeyToken=978d5e1bd64b33e5" />
</httpModules>print("code sample");
Run Code Online (Sandbox Code Playgroud)