繁体   English   中英

尝试从web.config获取connectionString时出错

[英]Error while trying to get connectionString from web.config

我有一个SelfHosted WCF服务,当我尝试从web.config文件读取连接字符串时

string conn = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

然后我得到一个错误:

你调用的对象是空的。

我的Web.config:

<configuration>
  <connectionStrings>
    <add name="MyConnectionString" connectionString="server=192.168.1.2;database=TestDB;uid=sa;pwd=saas" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
  ...

我尝试按照此问题中的说明使用WebConfigurationManager ,但没有帮助。

为什么我无法从web.config获取connectionString?

更安全的设置:

ConnectionStringSettings conn = ConfigurationManager.ConnectionStrings["MyConnectionString"];
if (conn == null || string.IsNullOrEmpty(conn.ConnectionString)) 
{
    throw new Exception("Couln't find connection string in web.config.");
}
myConnString = conn.ConnectionString

选择配置文件后,也可以尝试在Visual Studio中进行设置,在属性窗口中将“ Copy to Output Directory设置为Copy always并重建应用程序。

在WCF服务中,我使用了这种方式来获取连接字符串。

ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString()

但是,如果您的问题与Asp.net有关并且想要享受它提供的特权(例如访问web.config),则可能需要在下面添加一些配置。 您提到自托管,我认为应该是app.config而不是web.config对吗? “我有理论认为您的wcf与Asp.net有关,在您的问题中没有提到,如果我错了,请纠正我。”

<system.serviceModel>
...
    <serviceHostingEnvironment **aspNetCompatibilityEnabled="true"**/>
...
</system.serviceModel>

我找到了解决方案。 这都是我的错。 在VS解决方案中,我有2个项目:First(WCF服务)和Second(托管我的服务的控制台应用程序)。

问题是我将connectionStrings添加到web.config文件中的第一个项目中!

在我将connectionStrings添加到app.config文件中的Second项目之后,一切正常

如果您使用的是.NET 4.5+并可以访问C#6.0,则可以使用null合并运算符( ? )将conn设置为null,而不会自动引发异常:

string conn = ConfigurationManager.ConnectionStrings["MyConnectionString"]?.ConnectionString;
//-------------------------------------------------------------------HERE-^-HERE-------------

唯一不同于原始代码的方法是右括号后的附加问号。 ConfigurationManager.ConnectionStrings["MyConnectionString"]为null时,当您尝试访问null对象上的ConnectionString属性时,不会自动引发异常。

AFAIK上面使用空合并运算符的语句在功能上等效于以下代码:

// First, see if you can get a reference to the main object in ```Web.config```.
ConnectionStringSettingsCollection connStringSettingsCollection = ConfigurationManager.ConnectionStrings["MyConnectionString"];

// Next, try to get the value -- but don't throw an exception if it can't be retreived.
string conn;

if (connectionStringsInfo == null)
    conn = default(string);
else
    conn = connectionStringsInfo.ConnectionString;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM