WCF настроить тип ответа в обработке ошибок - PullRequest
0 голосов
/ 22 ноября 2018

Я работаю над сервисом отдыха, который разработан с использованием приложения WCF.Сервис работает как в формате xml, так и в формате json как остальные.И я должен обрабатывать ошибки, поэтому я разработал ErrorHandler, который является производным от IErrorHandler.

    public class ErrorHandler : IErrorHandler
{
    public bool HandleError(Exception error)
    {
        return true;
    }

    public void ProvideFault(Exception exception, MessageVersion messageVersion, ref Message message)
    {
        CommonManager.Log($"Message:{exception.Message}, Stack Trace:{exception.StackTrace}");
        var response = CommonManager.CreateResponse(exception.Message);
        message = Message.CreateMessage(messageVersion, string.Empty, response, new DataContractJsonSerializer(typeof(ContainerModel<object>)));
        var wbf = new WebBodyFormatMessageProperty(WebContentFormat.Json);
        message.Properties.Add(WebBodyFormatMessageProperty.Name, wbf);
        var rmp = new HttpResponseMessageProperty();
        message.Properties.Add(HttpResponseMessageProperty.Name, rmp);
        rmp.StatusCode = System.Net.HttpStatusCode.OK;
    }
}

Ниже вы можете увидеть ответ XML.Тип корневого атрибута - «объект».

   <s:Body>
  <root type="object">
     <Data type="null"/>
     <IsSucceeded type="boolean">false</IsSucceeded>
     <Message>The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:data. The InnerException message was 'There was an error deserializing the object of type CosmosXIAMWebServices.Models.UserModel. The value 'asd' cannot be parsed as the type 'Int32'.'.  Please see InnerException for more details.</Message>
  </root>

Обычно, если запрос является успешным.Тип корневого атрибута: «AddOrUpdateUserResponse»;

   <s:Body>
  <AddOrUpdateUserResponse xmlns="http://tempuri.org/">
     <AddOrUpdateUserResult xmlns:a="http://schemas.datacontract.org/2004/07/CosmosXIAMWebServices.Models" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Data>
           xx
        </a:Data>
        <a:IsSucceeded>false</a:IsSucceeded>
        <a:Message>Username is already exist with that user code</a:Message>
     </AddOrUpdateUserResult>
  </AddOrUpdateUserResponse>

И мне нужно, чтобы тип ответа был одинаковым во время ошибки и успеха.

Заранее спасибо.

...