ASP.NET应用程序仅部分读取外部配置

时间:2010-05-27 14:34:35

标签: c# .net asp.net configuration enterprise-library

我有一个ASP.NET Web应用程序,并尝试为某些配置引用外部配置(使用企业应用程序块配置),但它并没有完全正常工作。

我以前拥有web.config中的所有配置信息(并且它正在运行),但我们希望在多个应用程序之间共享一些配置信息。当我将configurationSource标记放在web.config中,并通过WebConfigurationManager对象读取配置时,它会加载一些外部配置信息(Logging),但不会加载connectionStrings而不是我创建的自定义部分。所以它正在读取它(日志记录正在工作),但有些点没有被连接,我的连接字符串也没有通过。

同样,它在web.config中完全有效。我正在运行.NET 3.5。

知道需要更改什么才能引用外部配置源并让它们全部通过?

[访问web.config的代码]

Configuration webConfig =
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringSettingsCollection connectionStrings =
    System.Web.Configuration.WebConfigurationManager.ConnectionStrings;

[web.config中]

<configuration>
  <configSections>
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=74025d8738dfe4ce" />
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
  </configSections>
  <enterpriseLibrary.ConfigurationSource selectedSource="File Configuration Source">
    <sources>
      <add name="File Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=74025d8738dfe4ce"
           filePath="C:\MSEAB\MSEAB.config" />
    </sources>
  </enterpriseLibrary.ConfigurationSource>
  ...
  ...
</configuration>

[external MSEAB.config]

<configuration>
  <configSections>
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=74025d8738dfe4ce" />
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=74025d8738dfe4ce" />
    <sectionGroup name="customSectionGroup">
      <section name="customSection" type="app.CustomSection" allowLocation="true" allowDefinition="Everywhere" />
    </sectionGroup>
  </configSections>
  <loggingConfiguration name="Logging Application Block" tracingEnabled="true"
        defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">
    ...
  </loggingConfiguration>

  <connectionStrings>
    <clear />
    <add name="DB.DEV" connectionString="User ID=user;Password=pwd;Data Source=DV1;" providerName="Oracle.DataAccess.Client"/>
    <add name="DB.TEST" connectionString="User ID=user;Password=pwd;Data Source=TS1;" providerName="Oracle.DataAccess.Client"/>
    ...
  </connectionStrings>
  <customSectionGroup>
    <customSection notificationemail="email@mail.com" dirPath="C:\Dir" initialrowlimit="500" maxrowlimit="1500" adminadgroup="_admins">
    </customSection>
  </customSectionGroup>
</configuration>

1 个答案:

答案 0 :(得分:0)

配置Xml是否形成良好?前几天我遇到了Wcf配置部分的问题,我没有正确关闭标签,但除了没有响应的服务之外没有明显的错误。

您是否考虑过使用System.Configuration.SectionInformation.ConfigSource属性的原生外化行为?它的用法如下:

<pages configSource="pages.config"/>

有关详细信息,请参阅SectionInformation.ConfigSource topic

应该注意,由于安全问题,它仅支持相对路径名。哦,它只能应用于ConfigurationSection,而不是ConfigurationElement