这似乎是一个非常简单的问题但不适合我。我试图从web.config文件中读取连接字符串。
我有WCF服务应用程序,它有web.config文件。在web.config文件中我定义了连接字符串。 然后我在默认网站下的IIS7上部署了wcf应用程序(安装IIS7时出现的一个模板)。
现在,当我们读取连接字符串时,它没有给我在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,apppool是.net framework 4.0和windows 7 machine。
谢谢, Awadhendra
答案 0 :(得分:1)
web.config有一个专用的连接字符串部分,您正在使用的代码是使用配置管理器访问web.config中的连接字符串部分。您遇到的问题是您没有将连接字符串放在连接字符串部分中,而是将其放在应用程序设置中。将连接字符串移出应用程序设置并放入连接字符串部分,或更改代码以从应用程序设置中读取它。现在在应用程序设置中存储连接字符串是在.NET 2.0中完成的方式,但从那时起(.NET 3.5)已经为连接字符串创建了专用部分。
请参阅here
e.g。
<connectionStrings>
<add name="ConnString" connectionString="xxxwhateveritisxxx" />
</connectionStrings>
或代码从应用设置中读取它(如果您必须在应用设置中使用它,但我不建议这样做):
string connectionString = ConfigurationManager.AppSettings["ConnString"];
答案 1 :(得分:0)
你可以尝试一下: -
string connString = ConfigurationManager.AppSettings["ConnString"].ToString()
return connString;
它将读取web.config的应用程序设置部分。