обработка исключений в сервисной структуре - PullRequest
1 голос
/ 08 апреля 2019

У меня в API-интерфейсе есть метод контроллера, вызывающий службу, которая вызывает пользовательское исключение.

customException : 
    public class DematerialisationException : Exception
{
    private static readonly string DefaultMessage = "An error occurred during dematerialisation.";

    public DematerialisationException() : base(DefaultMessage)
    { }

    public DematerialisationException(string message) : base(message) 
    { }

    public DematerialisationException(Exception inner) : base (DefaultMessage, inner)
    { }

    public DematerialisationException(string message, Exception inner) : base (message, inner)
    { }
}

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

public async Task<LiasseDetails> CreateLiasseAsync(LiasseCreate liasseData) => 
throw new DematerialisationException();

затем вызывающий абонент: enter image description here

Я бы ожидал, что ex3 попадет, а не ex2, как вы можете видеть на скриншоте.Внутреннее исключение имеет правильный тип, так почему неверная точка останова?Что я сделал не так?

спасибо

1 Ответ

2 голосов
/ 08 апреля 2019

В переменной watcher вы можете видеть, что ServiceException выбрасывается при получении значения InnerException, это произошло потому, что объект исключения не мог быть сериализован. Поэтому попробуйте добавить атрибут [Serializable()] в DematerialisationException class:

[Serializable()]
 public class DematerialisationException : Exception
{
    private static readonly string DefaultMessage = "An error occurred during dematerialisation.";

    public DematerialisationException() : base(DefaultMessage)
    { }

    public DematerialisationException(string message) : base(message) 
    { }

    public DematerialisationException(Exception inner) : base (DefaultMessage, inner)
    { }

    public DematerialisationException(string message, Exception inner) : base (message, inner)
    { }
}
...