尝试从web.config

时间:2015-11-13 01:23:13

标签: c# wcf 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>
  ...

我尝试使用此question中所述的WebConfigurationManager,但它没有帮助。

为什么我无法从web.config获取connectionString?

4 个答案:

答案 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;