2015-02-12 42 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的部分。

相关问题