Обработка ошибок в WCF WebHttp Services с исключением WebFaultException только в формате xml - PullRequest
3 голосов
/ 17 ноября 2011

Я пытаюсь получить исключение WebFaultException в виде json и xml в зависимости от того, что запрашивает клиент, как описано в

http://blogs.msdn.com/b/endpoint/archive/2010/01/21/error-handling-in-wcf-webhttp-services-with-webfaultexception.aspx

Мой сервисный интерфейс выглядит так

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "session_record?id={id}&command={command}")]
    void SessionRecord(Guid id, String command);

Исключение

throw new WebFaultException<string>("Session not started", HttpStatusCode.Conflict);

Настройка службы Web.config

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" faultExceptionEnabled="true" automaticFormatSelectionEnabled="true"  />
  </webHttpEndpoint>
</standardEndpoints>

Мой клиент звонит в сервис

$.ajax({
            url: "Webservice/session_record?id={id}&command={command}".format({ id: $("#sessionGuid").val(), command : "start" }),
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                alert("Started");
            }
        });

Я бы, кроме как получить JSON с сервера, но я получаю XML

И поскольку я прочитал это в ссылке, которую я отправил, я должен быть возможен

С WebFaultException подробности исключения, которое сериализуется в теле> ответного сообщения, всегда будут иметь формат (XML или JSON), который клиент> получил бы>, если бы не было ошибки. Если клиент ожидал XML, клиент получит детализацию исключения, сериализованную как XML. Аналогично, если клиент ожидал JSON,> клиент получит детализацию исключения, сериализованную как JSON.

Ответы [ 2 ]

4 голосов
/ 18 ноября 2011

Я нашел решение;faultExceptionEnabled должно быть ложным.Теперь я получаю исключение в JSON.

1 голос
/ 10 июня 2015

незначительные изменения в настройке службы Web.config тоже должны работать: automaticFormatSelectionEnabled = "false" defaultOutgoingResponseFormat = "json"

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" faultExceptionEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json" />
  </webHttpEndpoint>
</standardEndpoints>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...