WCF ValidationFault - PullRequest
       32

WCF ValidationFault

2 голосов
/ 17 января 2009

Я использую Блок приложения проверки - 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 ]

4 голосов
/ 17 января 2009

На самом деле в сбое присутствует коллекция, содержащая все сообщения, которые вы ищете:

foreach (ValidationDetail detail in fault.Detail.Details)
{
   ...
}
0 голосов
/ 03 декабря 2014

Так что это древнее, но у меня возникла та же проблема, и я нашел ответ.

Проблема для меня заключалась в том, что я добавил атрибуты [ValidationBehavior] и [FaultContract )] после Я создал ссылку на службу в моем клиенте. Чтобы заставить его работать, мне пришлось обновить ссылку.

Некоторые другие возможные вещи для проверки:

1) Эта ошибка была исправлена ​​в Enterprise Library 6. Я не уверен в этом, но нашел несколько упоминаний об исправлениях кода в EntLib для подобных проблем. Убедитесь, что вы используете последнюю версию EntLib.

2) Вы используете параметр ErrorMessage для сообщения об ошибке проверки вместо MessageTemplate.

...