我有一个WCF服务配置了企业库5“日志应用程序块”,“验证应用程序块与WCF集成”和“异常处理应用程序块WCF提供程序”,并使用流畅的API配置它,如下所示:
builder.ConfigureExceptionHandling()
// -----------------------------------------------------
// Preventing Enterprise Library Validation Block exceptions from getting shielded.
// -----------------------------------------------------
.GivenPolicyWithName("WCF Exception Shielding")
.ForExceptionType<FaultException<ValidationFault>>()
.ThenDoNothing()
// -----------------------------------------------------
// Shielding unhandled exceptions
// -----------------------------------------------------
.ForExceptionType<Exception>()
.LogToCategory("My Logging Category")
.WithSeverity(TraceEventType.Critical)
.ShieldExceptionForWcf(typeof(ServiceUnhandledFault), Resources.UnhandledException_ErrorMessage)
.ThenThrowNewException();
服务实施:
[ServiceContract]
[ValidationBehavior]
[ExceptionShielding("WCF Exception Shielding")]
public interface IMyService
{
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(ServiceUnhandledFault))]
void InsertEntity(MyEntity file);
}
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
public partial class MyService : IMyService { ...Implementation... }
如果我将服务调试行为的“IncludeExceptionDetailInFaults”属性设置为false并使用无法正确验证的实体调用服务操作,则服务中将抛出以下异常:
Microsoft.Practices.Unity.ResolutionFailedException:依赖项的解析失败,type =“Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicyImpl”,name =“WCF Exception Shielding”。 在解决时发生异常: 例外情况是: InvalidOperationException - 类型ExceptionPolicyImpl具有多个长度为2的构造函数。无法消除歧义。
但是如果我将IncludeExceptionDetailInFaults设置为true,则会将验证错误返回给客户端。
有人知道我错过了什么吗?
答案 0 :(得分:0)
看起来您正在尝试使用Fluent API方法配置Ent Lib。当我尝试使用BOTH配置文件(web.config)和流畅的api配置Ent Lib时,我遇到了类似的错误。如果是,您可以尝试删除配置文件变量,并仅使用流畅的api。我发现这解决了我的错误。 让我知道它是怎么回事。