JQuery ajax () обработки ошибок WCF? - PullRequest
5 голосов
/ 12 мая 2011

Как обрабатывать ошибки / исключения, возвращаемые службой WCF (REsTful) в методе Jquery ajax()?

Если у меня includeExceptionDetailInFaults="true" включено и я использую

error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert(XMLHttpRequest.responseText);
 }

Единственное, что я получаю, это строка HTML (страница HTML) с глубоко скрытой ошибкой ;;

Я хочу отображать ошибки типа

  1. Служба не найдена (HTTP 400 и 500 errrors)
  2. .net исключения, выданные WCF страница клиента (javascript)

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 12 мая 2011

includeExceptionDetailsInFaults - это скорее инструмент отладки для незапланированных исключений, чем способ фактически доставлять ошибки клиенту. Такие ошибки обычно представляют собой 500 внутренних ошибок сервера, сведения о которых не должны передаваться клиенту. Для службы REST способ доставки этих данных вызывающей стороне по умолчанию - вернуть их в виде текста / HTML.

Однако, если вы пытаетесь вернуть логические ошибки из вашего сервиса, вы должны вызывать экземпляры WebFaultException<T>, где T может быть простым строковым сообщением или, если вы хотите что-то более сложное, может быть классом, который будет сериализоваться в структурированный формат в соответствии с тем, что сериализовано для конечной точки службы. Вы также можете установить код статуса ответа во время создания WebFaultException<T>.

Если вы хотите, чтобы универсальная обработка всех необработанных исключений возвращала представление структурированного типа контента и код состояния, вам нужно было бы написать свой собственный IErrorHandler и выполнить преобразование типа необработанного исключения в WebFaultException<T> в вашем ProvideFault реализация.

0 голосов
/ 12 мая 2011

Я не пробовал это специально для запроса к WCF, но это работает для вызовов WebMethod на странице ASP.NET ASP.NET:

            error: function(e) {
                var errorObject = JSON.parse(e.responseText);
                if (errorObject.ExceptionType === 'MyNamespace.MyException') {
                   //do stuff for MyException
                }
                else {
                    //do regular exception handling
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...