簡體   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