C# “项目回报”;未设置对象引用…“;尝试从app.config读取时

C# “项目回报”;未设置对象引用…“;尝试从app.config读取时,c#,.net,sql-server,wcf,clr,C#,.net,Sql Server,Wcf,Clr,我有一个由MSSQLServer调用的c#CLR项目。CLR项目尝试连接到WCF服务并从中读取。 通常,在相应的app.config文件中配置webservice绑定和端点。我的项目也是如此。 但是,例如,当我尝试从app.config文件读取AppSettings时,我会得到一个“对象引用未设置为此对象的实例”。AppSettings调用的返回值为null。CLR找不到配置文件。我想调用配置文件,因为它包含我要连接的端点URL 这就是我正在做的: 1.构建CLR DLL并将其与配置文件一起放入

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

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

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

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

也许最简单的解决方案是在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位置问题。

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

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

var value = ConfigurationManager.AppSettings["mySetting"];
如果您的
app.config
文件如下:

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


这里有一篇很老但很详细的文章:但为什么不将配置保存在数据库本身的一个表中,并将所需的配置参数从SQL server本身传递到dll?嗨,kkokosa,我已经这样做了。问题是我们需要端点位于不同的文件中。我们不想每次将dll部署到我们的一个客户机时都重新编译它。不过这给了我一个想法。我们将添加一个包含端点的额外参数。它通过SQL Server传递。数据存储在一个表中。这样,我们不需要使用任何配置文件,只需在安装项目中交付dll。