2015-02-12 61 views
0

這似乎是一個非常簡單的問題,但不適合我。我正在嘗試從web.config文件讀取連接字符串。當部署到IIS7時,從web.config文件讀取連接字符串

我有WCF服務應用程序有web.config文件。在web.config文件中,我定義了連接字符串。 然後,我在默認網站(安裝IIS7時提供的一個模板)下的IIS7上部署了wcf應用程序。

現在,當我們讀到的連接字符串,然後它不給我限定在WCF web.config文件中的連接字符串。不知何故,我無法訪問它。並且在調試的時候,我發現了一個連接字符串,它實際上不是我在wcf web.config中定義的連接字符串,但它是我不想要的默認網站連接字符串。

我要訪問我只定義了WCF的web.config文件的連接字符串。我陷入了困境。我嘗試了所有,但沒有運氣。作爲參考,我把我嘗試的代碼和web.config代碼也。

Web.Config代碼。

<configuration> 
    <system.diagnostics> 
    <trace> 
     <listeners> 
     <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      name="AzureDiagnostics"> 
      <filter type="" /> 
     </add> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
    <appSettings> 
    <add key="ConnString" value=""/> 
    <!--<add key="ConnString" value=""/>--> 
    </appSettings> 
    <connectionStrings/> 
    <system.web> 
    <httpRuntime maxRequestLength="2097151" 
    useFullyQualifiedRedirectUrl="true" 
    executionTimeout="14400" /> 
    <compilation debug="true" /> 
    </system.web> 

代碼讀取CONNSTRING

string connString = string.Empty; 

      string svcDir = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath; 
      DirectoryInfo rootDir = Directory.GetParent(svcDir); 
      string root = rootDir.FullName; 
      string webConfigFilePath = root + "\\Web.config"; 

      ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
      fileMap.ExeConfigFilename = webConfigFilePath; 
      Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 

      var test = configuration.ConnectionStrings.ConnectionStrings; 

      string connectionString = ""; 
      if (configuration.ConnectionStrings.ConnectionStrings["ConnString"].ConnectionString.Length > 0) 
      { 
       connectionString = configuration.ConnectionStrings.ConnectionStrings["ConnString"].ConnectionString; 
      } 

      //var connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ConnString"]; 
      //if (connectionString != null) 
      //{ 

      //} 

      return connString; 

我使用.NET Framework 4.0,IIS 7中,應用程序池是.NET框架4.0和Windows 7的機器。

感謝, Awadhendra

+0

你試圖讀取來自外部的連接字符串值WCF應用程序或從WCF服務代碼中? – Sarathy 2015-02-12 08:30:52

+0

在WCF服務代碼中。 – Awadhendra 2015-02-12 08:31:29

+0

你可以嘗試使用System.Configuration.ConfigurationManager.ConnectionStrings [「ConnString」]。ConnectionString? – Sarathy 2015-02-12 08:32:20

回答

1

的Web.config有連接字符串專用的部分,並且您正在使用的代碼是使用配置管理器來訪問在web.config中的連接字符串部分。您遇到的問題是您沒有將連接字符串放入連接字符串部分,您已將其放入應用程序設置中。將連接字符串移出應用設置並放入連接字符串部分,或將您的代碼更改爲從應用設置中讀取。現在,在應用程序設置中存儲連接字符串的方式是在.NET 2.0中完成的,但從那時起(.NET 3.5),已經有專用於連接字符串的部分。

請參閱here

例如

<connectionStrings> 
<add name="ConnString" connectionString="xxxwhateveritisxxx" /> 
</connectionStrings> 

或代碼從應用程序設置中讀取它(如果必須在應用程序設置有它,雖然我不建議):

string connectionString = ConfigurationManager.AppSettings["ConnString"]; 
0

u能試用一下這個: -

string connString = ConfigurationManager.AppSettings["ConnString"].ToString() 
     return connString; 

它會讀取應用程序設置你的web.config的部分。

相關問題