【问题标题】:Can a web.config read from an external xml file?web.config 可以从外部 xml 文件中读取吗?
【发布时间】:2011-01-25 13:17:26
【问题描述】:

我必须在 WCF 主机使用的 web.config 文件和 Web 客户端使用的 web.config 文件之间复制一些设置(如连接字符串)。

为了不重复,我可以让两个 web.configs 从单独的 xml 文件中读取吗?这两个 web.configs 可以完全在不同的解决方案/项目中,所以我想这是不可能的,但想得到其他人的意见。

PS:我知道我可以使用数据库来存储所有配置设置。

【问题讨论】:

    标签: asp.net wcf


    【解决方案1】:

    是的,任何配置部分都可以“外部化” - 这包括<appSettings><connectionStrings> 等等。

    您的 web.config 中会有类似的内容:

    <configuration>
       <appSettings configSource="appSettings.config" />   
       <connectionStrings configSource="connectionStrings.config" />
       <system.web>    
          <pages configSource="pages.config" />
          <httpHandlers configSource="httphandlers.config">
       </system.web>    
    </configuration>
    

    外部化配置只包含其中的一个小节:

    httphandlers.config:

    <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
    </httpHandlers>
    

    请注意,您不能将整个&lt;system.web&gt; 部分外部化,因为这是一个配置节组 - 不是配置节 - 但您可以外部化 system.web 中包含的大部分子节。

    【讨论】:

    • httphandlers.config 应该放在哪里?共享此配置文件的项目可能位于域中
    • @DotnetDude:如果您不指定路径,则 httpHandlers.config 必须与 web.config 位于同一位置。您可以指定子路径,例如configSource="config\httpHandlers.config" 将所有配置文件放在一个地方。要在多个项目之间共享,要么复制到不同的项目位置,要么在操作系统级别执行符号链接之类的操作,以使一个物理文件显示在不同的目录位置
    【解决方案2】:

    配置文件可以指向其他配置文件,只要文件在同一路径(包括子目录)。

    这是我的配置设置示例:

    <connectionStrings configSource="web\config\connectionStrings.config" />
    <appSettings configSource="web\config\appSettings.config" />
    <system.diagnostics configSource="web\config\diagnostics.config" />
    <system.serviceModel>
        <bindings configSource="web\config\serviceModelBindings.config" />
        <behaviors configSource="web\config\serviceModelBehaviors.config" />
        <services configSource="web\config\serviceModelServices.config" />
        <client configSource="web\config\serviceModelClient.config" />
    </system.serviceModel>
    

    在我的例子中,我在一个根文件夹中有几个 Windows 应用程序,其中包括一个 Web 应用程序作为子文件夹。这允许每个应用程序的配置文件指向共享配置。

    【讨论】:

    • runtimesystem.web.extensions sections 不适用于 configSource ?
    【解决方案3】:

    如果可以,只需将配置放在 Machine.Config 中。它们都可以从那里读取,并且每个 web.config 都可以覆盖您需要的任何值。

    我说如果可以的话,因为我知道许多托管公司不会让您修改它,除非您租用专用服务器。

    【讨论】:

      【解决方案4】:

      您可以在 web.config 之外指定连接字符串 http://blog.andreloker.de/post/2008/06/Keep-your-config-clean-with-external-config-files.aspx 但它必须在同一个目录中。

      【讨论】:

      • 不,不必是同一个目录。您可以轻松编写:。完全没问题。
      • 然后他来了。把它放在一个单独的文件中,并在不同应用程序的 web.configs 之间共享!!
      猜你喜欢
      • 2023-03-27
      • 2022-01-15
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多