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.

Другие вопросы по тегам