尝试从app.config读取时,Project返回“对象引用未设置...”

时间:2013-11-08 08:55:48

标签: c# .net sql-server wcf clr

我有一个由MS SQL Server调用的c#CLR项目。 CLR项目尝试连接到WCF服务并从中读取。 通常,webservice绑定和端点在相应的app.config文件中配置。在我的项目中也是如此。 但是,例如,当我尝试从app.config文件中读取AppSettings时,我得到一个“对象引用未设置为此对象的实例”。 AppSettings调用的返回值为null。 CLR找不到配置文件。我想调用配置文件,因为它包含我想要连接的端点URL。

这就是我正在做的事:
1.构建CLR DLL并将其与配置文件一起放在目录中 2.在MS SQL Server(2008 R2)中加载程序集
3.创建功能并启动对CLR的调用

我做错了什么?在这种特定情况下,有没有办法从app.config文件中读取?

希望问题很清楚。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您是如何从app.config文件中读取设置的?

请记住使用System.Configuration命名空间中提供的ConfigurationManager类来检索配置文件的AppSettings部分中的设置值。你可以这样做:

var value = ConfigurationManager.AppSettings["mySetting"];

如果你有app.config这样的文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
     <add key="mySetting" value="setting"/>
  </appSettings>
</configuration>

答案 1 :(得分:0)

也许最简单的解决方案是在CLR DLL库中以编程方式配置WCF客户端?

var binding = new System.ServiceModel.BasicHttpBinding();
binding.SendTimeout = TimeSpan.FromMinutes( 1 );
binding.OpenTimeout = TimeSpan.FromMinutes( 1 );
binding.CloseTimeout = TimeSpan.FromMinutes( 1 );
binding.ReceiveTimeout = TimeSpan.FromMinutes( 10 );
using (var client = new SomeServiceSoapClient(binding, new System.ServiceModel.EndpointAddress("http://site.example/SomeService.asmx")))
{
    // client.DoWork(...)
}

并将配置数据(URL)作为参数传递给SQL CLR函数?这样,您就可以独立于app.config位置问题。