DatabaseFactory.CreateConnection()抛出未设置为对象实例的Object引用

时间:2011-08-23 06:19:45

标签: wcf windows-services

我有一个使用WCF服务的客户端应用程序抛出错误

  

对象引用未设置为对象的实例。

详细说明:

我正在使用带有Microsoft Enterprise库的WCF服务进行数据库连接,该服务在自托管环境中运行良好,但如果托管为windows service则会引发错误。我无法调试WCF服务,因为它作为Windows服务托管,所以我尝试使用try catch块来查找问题所在。

我遇到了这两行我发现最可疑的行

Database db = DatabaseFactory.CreateDatabase();
DbConnection conn = db.CreateConnection();

我已经在配置文件中设置了默认数据库。我认为第二行必须是原因。

请帮忙。

尝试在堆栈溢出时找到类似的问题,但失败了,因此发布了。

  

带有错误捕捉+堆栈跟踪的附加问题陈述......

enter image description here

堆栈跟踪

at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseConfigurationView.get_DefaultName()

at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseMapper.MapName(String name,IConfigurationSource configSource)

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ConfigurationNameMappingStrategy.BuildUp(IBuilderContext context,Type t,Object existing,String id)

at Microsoft.Practices.ObjectBuilder.BuilderBase`1.DoBuildUp(IReadWriteLocator locator,Type typeToBuild,String idToBuild,Object existing exists,PolicyList [] transientPolicies)

at Microsoft.Practices.ObjectBuilder.BuilderBase`1.BuildUp(IReadWriteLocator locator,Type typeToBuild,String idToBuild,Object existing exists,PolicyList [] transientPolicies)

at Microsoft.Practices.ObjectBuilder.BuilderBase`1.BuildUp [TTypeToBuild](IReadWriteLocator locator,String idToBuild,Object existing,PolicyList [] transientPolicies)

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp [T](IReadWriteLocator locator,IConfigurationSource configurationSource)

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp [T](IConfigurationSource configurationSource)

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.NameTypeFactoryBase`1.CreateDefault()

at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase()

在D:\ Projects \ WCFService \ WCFService \ Service1.cs中的WCFService.Service1.ExecuteSFDS(Cmd CmdObj,Int32 executionType):第32行

2 个答案:

答案 0 :(得分:1)

我几乎肯定这是因为app.config没有复制到输出中。确保配置文件位于运行进程的目录中,名称为“YourServiceName”.exe.config

如果是,在调试时查看是否可以使用ConfigurationManager获取连接字符串,同时确保连接字符串的名称正确。

修改

评论的最终结果:

我在输出配置文件中缺少连接字符串,其次我定义了相同的端点和基地址,所以我只是将EndPoint地址更改为“”。

答案 1 :(得分:0)

Windows服务通常以“本地系统”或“网络系统”的标识运行。 如果您使用Windows Integrated Security进行数据库连接,则会发现它无法连接到数据库。

快速解决方法是在有权访问数据库的工作组/域上的指定用户下运行您的服务。