[英]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.