簡體   English   中英

不同Web應用程序的通用web.config連接字符串?

[英]common web.config connectionstrings for different web applications?

我們有多個Web應用程序,並將所有Web應用程序部署在稱為iapps的同一文件夾中。 但是每個應用程序都有其自己的web.config文件,並且大多數應用程序必須具有通用連接字符串。

現在,我想制作一個通用的配置文件,所有應用程序都將讀取連接字符串並使用它。 我們該怎么做? 任何好的文章或例子

當前

\iapps\app1
         |- web.config

\iapps\app2
         |- web.config

\iapps\app3
         |- web.config

期待中

\iapps\app1    --Web.cofig
    |-root Config <-|
\iapps\app2    --Web.cofig
    |-root Config  <-|   
\iapps\app3    --Web.cofig
    |-root Config  <-|     

答案已經描述了幾種選擇。 另外,您還可以通過將所有通用連接字符串放在web.config根目錄下(即本例中的iApps)來利用繼承的思想。

app1 ... appN都將從iapps\\web.config繼承設置

請注意,您在iapps\\web.config中定義的iapps\\web.config都不會在子應用程序的web.config中重新定義,否則您的子應用程序中將出現重復的節定義錯誤。

您可以在AppDomain對象中覆蓋配置。

您的web.config可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="WebApp1" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="WebApp2" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<WebApp1>
   <add key="Key1" value="App1 value"/>
</WebApp1>
<WebApp2>
   <add key="Key1" value="App2 value"/>
</WebApp2>
</configuration>

在您的PageLoad事件中,您可以使用以下代碼:

SetConfig();
var webApp1Config = ConfigurationManager.GetSection("WebApp1") as NameValueCollection;
var webApp2Config = ConfigurationManager.GetSection("WebApp2") as NameValueCollection;

private static void SetConfig()
{
    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Temp\web.config");
    var fieldInfo = typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static);
    if (fieldInfo != null)
        fieldInfo.SetValue(null, 0);
    var field = typeof(ConfigurationManager).GetField("s_configSystem", BindingFlags.NonPublic | BindingFlags.Static);
    if (field != null)
        field.SetValue(null, null);
    var info = typeof(ConfigurationManager).Assembly.GetTypes().First(x => x.FullName == "System.Configuration.ClientConfigPaths").GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static);
    if (info != null)
        info.SetValue(null, null);
}

現在,您可以從配置設置中讀取設置:

var key1Value = webApp1Config["Key1"];

干杯馬丁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM