2011-10-17 4 views
3

У меня есть проект WCF REST, и я хочу поймать ошибки, которые создает среда WCF и отображает их на моем пути (JSON, то есть).WCF - как сделать пользовательские ошибки?

Например, если я ожидаю параметр int в своем вызове, и я получаю строку, структура будет отображать страницу с «ошибкой запроса» и некоторой информацией о трассировке ... Я бы просто хотел получить исключение и отобразить его в моем формате JSON в качестве ответа пользователю.

Просто, чтобы сделать это более понятным - я не хочу ловить исключение IN CODE, но исключение, которое происходит за пределами кода. исключение, которое WCF будет генерировать сам, например (когда я передал строку в поле int)

На сервере возникла ошибка при обработке запроса. См. Страницу справки службы для создания действительных запросов к службе. Сообщение об исключении: «Строка ввода не была в правильном формате». Подробнее см. Журналы сервера. Трассировка стека исключений: ...

Любые идеи, как это можно сделать?

Большое спасибо заранее!

+0

Я не понимаю ... вы спрашиваете, как поймать исключение или как показать «симпатичную» страницу ошибок в ASP? Пожалуйста, отметьте свой вопрос лучше. – qJake

+0

Вы правы. Я добавил немного больше объяснений. – Roman

+0

Исключения проходят через WCF ... если вы выбрали исключение в своей службе WCF, вы можете поймать его в своем клиентском коде. Я до сих пор не понимаю, в чем проблема. – qJake

ответ

1

Чтобы создать собственные ошибки, вам необходимо использовать FaultContracts. Занимает немного времени, чтобы настроить, но как только у вас есть это, он творит чудеса. Хорошо, что FaultContract полностью сериализуем.

[OperationContract] 
[FaultContract(typeof(CustomFault))] 
string WillThrowArgumentException(); 

Вот действительно хорошее объяснение того, как заставить его работать.
http://blog.ngommans.ca/index.php?/archives/33-Handling-custom-errors-in-WCF.html

+0

Спасибо. отлично подходит! – Roman

0

Это звучит, как вы хотите, чтобы реализовать глобальную обработку ошибок в службе WCF, так что вы можете поймать необработанное исключение (либо непредвиденное ошибку в коде или что-то вне вашего контроля). Если мое понимание верное, вы захотите изучить IErrorHandler Interface.

Существует ряд сообщений в блогах и статей о том, как импортировать IErrorHandler. Вот один из них, который охватывает как SOAP, так и REST: WCF Exception Handling with IErrorHandler.

+0

Спасибо, я доберусь до него :) Ты действительно помог! – Roman

Смежные вопросы