Не могу получить информацию от FaultExceptions (JavaScript) - PullRequest
2 голосов
/ 03 июля 2011

До сих пор я использовал веб-сервис ASMX, который я вызываю из javascript.Это работало нормально, но из-за того, что мне нужен был некоторый контроль над сериализацией, я пытаюсь перейти на DataContracts и WCF.Тем не менее, я верю, что есть кое-что, что я неправильно понял, потому что я пытаюсь поймать ошибочные исключения из клиентского кода (javascript), но единственная ошибка, которую я получаю, это: (переведено, поэтому может быть неточным)

«Сервер не смог обработать запрос из-за ошибки интерна. Вы можете получить больше информации об ошибке, активировав IncludeExceptionDetailInFaults ...»

Я попытался установить для параметра IncludeExceptionDetailInFauls значение true, которое дает некоторую информацию, но какНасколько я понял, весь смысл в создании FaultExceptions заключается в том, чтобы скрыть исключения от пользователя и только выдать немного информации?Я пытаюсь с IErrorHandler, но я создал более простой пример:

SVC:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WcfTest
{
    // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
    // To create an operation that returns XML,
    //    add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
    //    and include the following line in the operation body:
    //        WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    [OperationContract]
    public string DoOk()
    {
        // Add your operation implementation here
        return "Success";
    }
    [OperationContract]
    public string DoFail()
    {
        FaultReason reason = new FaultReason("Fail <- This is good :)");
        throw new FaultException(reason);
        return "Success";
    }
}

, который включен в менеджер сценариев и вызывается следующим javascript:

<a href="java script:void(0);" onclick="DoOk()">OK</a><br />
        <a href="java script:void(0);" onclick="DoFail()">Fail</a>
        <script>
            function DoOk() {
                WcfTest.DoOk(
                    function (result) {
                        alert("DoOk Success: "+result);
                    },
                    function (result) {
                        alert("DoOk Failed: " + result);
                    })
            }
            function DoFail() {
                WcfTest.DoFail(
                    function (result) {
                        alert("DoFail Success: " + result);
                    },
                    function (result) {
                        alert("DoFail Failed: " + result);
                    })        
            }
        </script>

и модель сервиса:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfTestAspNetAjaxBehavior">
      </behavior>
    </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="WcfTestAspNetAjaxBehavior">
    <enableWebScript />
    </behavior>
  </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
  <services>
  <service name="WcfTest">
    <endpoint address="" behaviorConfiguration="WcfTestAspNetAjaxBehavior"
    binding="webHttpBinding" contract="WcfTest" />
  </service>
  </services>
</system.serviceModel>

Я также пытался пометить метод DoFail комбинациями:

[FaultContract(typeof(FaultException))]  
[FaultContract(typeof(FaultReason))]

Я что-то неправильно понял?Разве вы не сможете получить информацию об исключении, бросив FaultException без необходимости устанавливать IncludeExceptionDetailInFaults в true?

1 Ответ

2 голосов
/ 02 июня 2012

Полезные ресурсы:

Основные шаги:

  1. Создание собственного обработчика ошибок путем имплементации интерфейса IErrorHandler
  2. Создание подкласса WebHttpBehavior и замена обработчика ошибок по умолчанию собственным обработчиком ошибок
  3. Подключите ваше пользовательское / расширенное поведение с помощью пользовательского ServiceHostFactory или определите его как поведениеExtension в web.config
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...