代码之家  ›  专栏  ›  技术社区  ›  Rob Cooper

web.config返回到Web场中的全局配置

  •  1
  • Rob Cooper  · 技术社区  · 17 年前

    我们中有几个人在办公室里遇到了这个问题。我们对将ASP.NET应用程序部署到一个Web场都是新的,我的想法还很新鲜。

    我们有一个Web场,应用程序被复制到所有这些服务器上。 但是,我们遇到了一个问题……

    尝试从中获取设置时引发异常 appSettings . 经过进一步调查,发现节点实际上没有使用本地 Web.Config 但它又回到了 Web.CONFIG 在.NET框架文件夹中(我们通过在那里添加出现在测试页上的键来证明这一点)。

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

    以下是我们确认的清单:

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

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

    有人对可能发生的问题有什么建议吗?感谢所有我能得到的帮助!

    谢谢。

    抢劫

    3 回复  |  直到 17 年前
        1
  •  6
  •   splattne    17 年前

    这是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处理程序。因为它不存在,所以会抛出一个错误。

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

    <httpModules>
      <remove name="ErrorLog"/>
    </httpModules>
    

    以下是网站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");
    
        2
  •  0
  •   splattne    17 年前

    根据你在评论中所说的,我建议你“尝试错误”。

    如果故意插入错误条目,会发生什么情况?应用程序是否失败或不影响任何内容?

    尝试复制内容,然后从头删除并重新创建该文件。

        3
  •  0
  •   Rob Cooper    17 年前

    首先,非常感谢你的回答,我真的很感谢你的帮助!

    只是这个问题的更新。这是一个艰难的时刻!

    结果,代码或配置没有任何问题。

    服务器场似乎发生了一些奇怪的事情(我完全无法控制或访问)。 系统管理员重新构建了服务器场,重新部署了解决方案,一切正常工作。

    我想我们永远不会知道哪里出了问题,但至少我们知道这不是一个发展问题!

    再次感谢 抢劫