Я настроил службу WCF с помощью Enterprise Library 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".
Исключение произошло во время: при разрешении.
Исключение: InvalidOperationException - Тип ExceptionPolicyImpl имеет несколько конструкторов длины 2. Невозможно устранить неоднозначность.
Но если я установлю для параметра IncludeExceptionDetailInFaults значение true, клиенту будет возвращена ошибка проверки.
Кто-нибудь знает, что мне не хватает?