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