我有一个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>
...
我尝试使用此question中所述的WebConfigurationManager
,但它没有帮助。
为什么我无法从web.config获取connectionString?
答案 0 :(得分:1)
更安全的设置:
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
并重建您的应用程序。
答案 1 :(得分:0)
在我的WCF服务中,我使用这种方式来获取连接字符串。
ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString()
但是如果您的问题与Asp.net有关并且想要享受它提供的权限,例如访问web.config,您可能需要在下面添加一些配置。你提到自托管,我认为它应该是app.config而不是web.config对吗? &#34;我有理论认为你的wcf与Asp.net有关,你在问题中没有提到,如果我错了,请纠正我。&#34;
<system.serviceModel>
...
<serviceHostingEnvironment **aspNetCompatibilityEnabled="true"**/>
...
</system.serviceModel>
答案 2 :(得分:0)
我找到了解决方案。这都怪我。在VS解决方案中,我有2个项目:第一个(WCF服务)和第二个(托管我的服务的控制台应用程序)。
问题是我在connectionStrings
档案中的第一个项目中添加了web.config
!
将connectionStrings
添加到app.config
文件中的第二个项目后,一切正常
答案 3 :(得分:0)
如果您正在使用.NET 4.5+并且可以访问C#6.0,则可以使用空合并运算符(?
)将conn
设置为null而不自动抛出例外:
string conn = ConfigurationManager.ConnectionStrings["MyConnectionString"]?.ConnectionString;
//-------------------------------------------------------------------HERE-^-HERE-------------
这与原始代码不同的唯一方法是结束括号后的附加问号。当ConfigurationManager.ConnectionStrings["MyConnectionString"]
为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;