【问题标题】:How to create generic web.config file for different web servers in .net web application?如何在 .net Web 应用程序中为不同的 Web 服务器创建通用 web.config 文件?
【发布时间】:2010-07-13 17:56:03
【问题描述】:

我想在 VB.NET 中为不同的 Web 服务器创建一个通用的 web.config 文件。因此,根据服务器配置要求,应用程序可以从该通用配置文件中检索所有值。

这可能吗?我该怎么做?

【问题讨论】:

  • 在每个 Web 服务器上简单地自定义 web.config 文件会更容易。
  • 现在就是这样,但如果我必须进行任何更改,我必须手动将新的 web.config 文件的副本安装到所有网络服务器。那是因为我想创建通用配置文件,因此每个 Web 服务器只需查询配置文件并获取它们所需的配置。

标签: asp.net web-config


【解决方案1】:

这只是一个随机的想法,但它可能不符合您的需求。您可以为每个以服务器名称命名的服务器创建一个配置部分。创建一个辅助类来读取配置值,首先检查以服务器名称命名的部分中的任何值,如果不存在,则从默认配置部分读取它。

我仍然不确定这是否是一个明智的决定,这只是一个选择。

【讨论】:

    【解决方案2】:

    从技术上讲,machine.config 包含适用于整台机器的设置。

    web.config 文件可以覆盖其中的一些设置。

    【讨论】:

      【解决方案3】:

      对于保持不变的所有内容,请使用单个 web.config。

      对于所有更改,请使用对外部文件的引用。

      <configuration>
         <appSettings file="ExternalWeb.config">
            <add key="MyKey" value="MyValue" />
         </appSettings>
         ...
      </configuration>
      

      http://www.devx.com/vb2themax/Tip/18880

      这样,当主 web.config 中的内容发生变化时,几乎不需要更新。

      您也可以考虑使用模板和代码生成技术为每个服务器生成一个 web.config。

      【讨论】:

      • 但是,假设我有 2 个不同的 Web 服务器,对于 webserver1,我如何查询配置文件并获取该配置文件的设置以及 webserver2 的不同设置?
      • @约翰。并非完全正确,许多标签具有外部文件属性,也适用于 connectionStrings ,例如configSource="web_settings.config",配置文件也是如此。 weblogs.asp.net/fmarguerie/archive/2007/04/26/…
      • @user390771 我不再关注你要去的地方了。典型的场景是你有一个开发、测试和生产服务器,每个服务器都有一个稍微不同的 web.config 文件,但大部分内容是相同的。每个应用程序只有一个配置文件。您可能会想到一个可以同时从多个资源访问的资源。这需要将设置存储在数据库中。只要您的每台服务器都有一个带有合适连接字符串的 web.config 文件,您就可以手动实现它。
      • @Matthew: 那是configSource,不是file
      【解决方案4】:

      “模式”应用设置键/值怎么样。这个“模式”可以设置为“dev”、“testing”、“prod”等。然后,设置当前配置文件的模式,并为所有会随着模式而改变的设置添加前缀。

      例子:

      <add key="mode" value="test" /> <!-- possible values: dev, test, prod -->
      
      <add key="dev.dbconnstr" value="data source=DB;userid=ABC;password=DEF" />
      <add key="test.dbconnstr" value="data source=DB;userid=ABC;password=DEF" />
      <add key="prod.dbconnstr" value="data source=DB;userid=###;password=###" />
      

      然后,使用配置类根据模式读取设置。

      例子:

      mode = ConfigurationManager.AppSettings("mode");
      CongifurationManager.AppSettings(mode + ".dbconnstr");
      

      这样做,您可以将相同的配置文件部署到所有服务器,而不必担心调整每台服务器(当然,在部署时更新“模式”值除外)。我还建议不要将生产凭据保存在其他配置文件中,而是用占位符替换它。

      【讨论】:

      • 人们还在使用配置文件中的数据库密码吗?
      • 这很聪明。另一种变体是使用机器名称而不是模式。
      • @remco 是的,因为要求大多数 DBA 和服务器管理员配置委派以允许 Windows 凭据的双跳(对于 asp.net 到 sql 在不同的盒子场景中)是不合理的。我曾要求比我聪明得多的人这样做,但他们放弃了。
      【解决方案5】:

      您可以使用类似 nant 的方式创建一个部署脚本,该脚本加载到包含配置选项占位符的 web.config 中。然后,这可以替换适当环境的占位符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 2019-12-19
        • 2011-03-28
        • 1970-01-01
        相关资源
        最近更新 更多