Получить сообщение об исключении при вызове службы wcf из jquery - PullRequest
4 голосов
/ 10 января 2010

Я звоню в службу WCF из jquery ajax. Иногда служба выдает некоторые пользовательские ошибки, и когда это происходит, мне нужно получить сообщение об этой ошибке. В функции ошибки моего вызова ajax у меня есть следующий код:

            error: function(data) {
              alert("responseText: " + data.responseText);
            }

И ответный текст при возникновении ошибки выглядит примерно так:

responseText: {"ExceptionDetail":{"HelpLink":null,"InnerException":null,"Message":"Denied",......}}

Я хочу получить «Сообщение» от «ExceptionDetail», но я не уверен, как это сделать.

Мой сервис WCF выглядит так, чтобы проверить его, я просто выкидываю ошибку:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string myFunction(string id)
{
    throw new Exception("Denied");
}

Как я могу получить сообщение об ошибке?

Ответы [ 2 ]

6 голосов
/ 10 января 2010

По умолчанию WCF будет , а не возвращать любые подробности исключений - это требуемая особенность, чтобы не сообщать слишком много информации возможному злоумышленнику.

Если вы хотите включить подробные сообщения об исключениях, вы можете сделать это, включив поведение на стороне сервера:

 <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="debugBehavior">
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <services>
        <service name="YourService"
                 behaviorConfiguration="debugBehavior">
             .....
        </service>
    </services>

Но даже сейчас - вы должны знать, что WCF должен быть совместимым, поэтому клиент может не работать в .NET -> поэтому вы не можете просто отбросить исключение - это специфическая для .NET конструкция.

Лучший вариант - перехватить все исключения на сервере (например, с помощью интерфейса IErrorHandler ) и превратить их в ошибки SOAP - совместимый эквивалент исключения .NET. Если вы знаете, что другой конец всегда является клиентом .NET, вы можете легко преобразовать исключение .NET в FaultException<T>, где T - ваше исключение .NET.

Когда вы делаете это, вы можете поймать исключение на клиенте, перехватив FaultException<T>, и его свойство .Detail должно содержать обычное исключение .NET, как вы его знаете (и оно содержит свойство .Message с сообщение об исключении).

0 голосов
/ 09 мая 2012

Первое, что нам нужно сделать, это установить в web.config как упоминание marc_s как:

<serviceBehaviors>
 <behavior name="">
  <serviceMetadata httpGetEnabled="true" />
  **<serviceDebug includeExceptionDetailInFaults="true" />**
</behavior>

В дополнение к этому на уровне jquery в части ошибки необходимо проанализировать ответ об ошибке, который содержит исключение, подобное:

 .error(function (response, q, t) {
      var r = jQuery.parseJSON(response.responseText);
    });

Затем, используя r.Message, вы можете фактически показать текст исключения.

Смотрите полный код: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...