ExceptionPolicyImpl类型具有多个长度为2的构造函数。无法消除歧义

时间:2012-01-18 07:17:45

标签: wcf enterprise-library

我有一个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,则会将验证错误返回给客户端。

有人知道我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试使用Fluent API方法配置Ent Lib。当我尝试使用BOTH配置文件(web.config)和流畅的api配置Ent Lib时,我遇到了类似的错误。如果是,您可以尝试删除配置文件变量,并仅使用流畅的api。我发现这解决了我的错误。 让我知道它是怎么回事。