2010-05-27 106 views
0

我有一個ASP.NET Web應用程序,並試圖引用外部配置(使用企業應用程序塊配置)的一些配置,但它不完全正常工作。ASP.NET應用程序只部分讀取外部配置

我以前擁有web.config中的所有配置信息(它正在工作),但我們希望在多個應用程序之間共享這些配置信息。當我將configurationSource標籤放入web.config中,並通過WebConfigurationManager對象讀取配置時,它會加載一些外部配置信息(日誌記錄),但不會加載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> 

[外部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 protected]" dirPath="C:\Dir" initialrowlimit="500" maxrowlimit="1500" adminadgroup="_admins"> 
    </customSection> 
    </customSectionGroup> 
</configuration> 
+0

對不起,特倫特,並不意味着要揍你最後的編輯。我只是試圖將文本分成多個段落。 – 2010-05-27 14:53:29

回答

0

是良好形成的XML配置?前幾天我遇到了一個Wcf配置部分的問題,我沒有正確關閉標籤,但除了服務沒有響應之外,沒有明顯的錯誤。

您是否考慮過使用System.Configuration.SectionInformation.ConfigSource屬性的本機外化行爲?它的用法如下:

<pages configSource="pages.config"/> 

更多信息,請參見SectionInformation.ConfigSource topic

應該注意的是,由於安全考慮,它只支持相對路徑名。哦,它只能應用於ConfigurationSection,而不是ConfigurationElement