2015-11-13 40 views
0

的connectionString我有一個SelfHosted WCF服務,當我試圖從web.config文件錯誤,同時試圖從web.config中

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

然後我得到一個錯誤讀取連接字符串:

Object reference not set to an instance of an object.

我的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在本描述question,但它沒有幫助。

爲什麼我無法從web.config獲取connectionString?

+0

您真的確定錯誤是來自該行未來和Web.config文件中您服務是加載你認爲的那個? –

+0

@MarcoScabbiolo是的,我確定。該錯誤發生在該行 – Marusyk

回答

0

我找到了解決辦法。是我的錯。在VS解決方案中,我有兩個項目:第一個(WCF服務)和第二個(託管我的服務的控制檯應用程序)。

問題是我在web.config文件中添加了connectionStrings到第一個項目!

我加入了connectionStrings到第二個項目在app.config文件後,一切工作正常

1

多了一點安全settinng:

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 DirectoryCopy always和重新構建應用程序。

+0

謝謝,不幸的是,它沒有解決問題,但我會用這個檢查。 +1 – Marusyk

0

在我的WCF服務中,我用這種方式來獲取connectionstring。

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

但如果你的問題有事情做與Asp.net,想享受它提供諸如訪問web.config中,您可能需要下面添加一些配置權限。你提到的自託管,我認爲它應該是app.config而不是web.config的權利? 「我有理論認爲你的wcf與Asp.net有關,這在你的問題中沒有提到,如果我錯了,請糾正我。」

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

謝謝,但它沒有幫助( – Marusyk

+1

你提到自己承載我認爲它應該是app.config不是web.config? – jtabuloc

+0

是的,你是對的,但我已經解決了這個問題,請看我的答案。謝謝。 – Marusyk

0

如果您在使用.NET 4.5+,並有機會獲得C#6.0中,你可以使用空合併運算符的(?)有conn設置爲null沒有自動拋出異常:

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

這是從原始的代碼不同的唯一辦法是結束括號後的額外的問號。當ConfigurationManager.ConnectionStrings["MyConnectionString"]爲空時,當您嘗試訪問空對象上的ConnectionString屬性時,不會自動拋出異常。

據我所知,它使用空合併運算符上面的語句在功能上等同於下面的代碼:

// 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;