我一直在考虑将一些旧代码重构为基于net 4.0的新WCF服务,并且对于应该是一个简单的练习有点困难!
场景;
通过HTTP托管的WCF服务,实现我们的ServiceContract,它连接到本地Sql Server。
尝试针对服务调用运行简单的NUnit测试时,出现以下错误;
* HelpManager.Tests.GetPage.GetPageById错误 例外: System.ServiceModel.FaultException`1 [System.ServiceModel.ExceptionDetail]: 尝试获取类型实例时发生激活错误 数据库,关键“帮助管理”(故障细节等于安 ExceptionDetail,可能由。创建 IncludeExceptionDetailInFaults = true,其值为: Microsoft.Practices.ServiceLocation.ActivationException:激活 尝试获取Database,key类型的实例时发生错误 “帮助管理”----> Microsoft.Practices.Unity.ResolutionFailedException:解析 依赖失败,type = “Microsoft.Practices.EnterpriseLibrary.Data.Database”,name = “HelpManagement”。在解决时发生异常:例外 是:InvalidOperationException - 数据库不能是 建造。您必须配置容器以提供此值。 - - - - - - - - - - - - - - - - - - - - - - - - 当时的 例外,容器是:
解决 Microsoft.Practices.EnterpriseLibrary.Data.Database,HelpManagement ----> System.InvalidOperationException:类型数据库不能 建造。您必须配置容器以提供此值 在 Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.GuardTypeIsNonPrimiti ...)。
我们的(非常标准的)WCF web.config,看起来像;
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true"/>
</configSections>
<dataConfiguration defaultDatabase="HelpManagement"/>
<connectionStrings>
<add name="HelpManagement" connectionString="server=(local);database=ieq;uid=;pwd=" providerName="System.Data.SqlClient"/>
</connectionStrings>
以及用于调用它的代码示例;
private const string DB_HelpManagement = "HelpManagement";
var db = DatabaseFactory.CreateDatabase(DB_HelpManagement);
谷歌等人并不好玩。我已检查过版本等,它们似乎都是从GAC引用相同的5.0.14,所以不确定问题是什么。
提前致谢
答案 0 :(得分:2)
我想知道Microsoft.Practices.ObjectBuilder.dll和Microsoft.Practices.EnterpriseLibrary.Common - 它们是在WCF项目中引用的吗?
答案 1 :(得分:0)
听起来可能是你的配置。您是否在配置文件中指定了dataConfiguration defaultDatabase值(例如web.config)?