WCF ValidationFault
Я использую блок приложения проверки - Enterprise Library для проверки параметров, отправленных на мои операции службы WCF. Например, для определенной операции требуется, чтобы параметр был 1 или 6, например:
[OperationContract(Name="GetEmployeesByRegion")]
[FaultContract(typeof(ValidationFault))]
List<Employees> GetEmployeesByRegion([DomainValidator(1,6)]int regionId);
Это работает просто отлично, т.е. ошибка проверки происходит, однако, когда служба вызывается клиентом, генерируется универсальное исключение System.ServiceModel.FaultException. Сообщение указывает: "Создатель этой ошибки не указал причину".
Теперь я мог бы проверить параметры самостоятельно перед вызовом службы и выдать пользовательскую ошибку, но это, кажется, лишает смысла валидацию параметров на основе атрибутов с использованием блока приложения проверки. Есть ли способ настроить ошибку, возвращаемую в результате ошибки проверки? Также возможно, что я делаю что-то совершенно не так. Я просто хочу, чтобы вызывающий абонент знал, что он / она должен был ввести 1 или 6 в сообщении об исключении. Это возможно?
2 ответа
На самом деле в сбое присутствует коллекция, содержащая все сообщения, которые вы ищете:
foreach (ValidationDetail detail in fault.Detail.Details)
{
...
}
Так что это древнее, но у меня была та же проблема, и я нашел ответ.
Проблема для меня заключалась в том, что я добавил атрибуты [ValidationBehavior] и [FaultContract
Некоторые другие возможные вещи, чтобы проверить:
1) Эта ошибка была исправлена в Enterprise Library 6. Я не уверен в этом, но нашел несколько упоминаний об исправлениях кода в EntLib для подобных проблем. Убедитесь, что вы используете последнюю версию EntLib.
2) Вы используете параметр ErrorMessage для сообщения об ошибке проверки вместо MessageTemplate.