Простой Алгоритм данных C # Вопрос - Заполните класс от класса Исключения - PullRequest
1 голос
/ 10 декабря 2010

Я создаю это решение для ведения журнала elobrate для использования в правительственных учреждениях, где нужно что-то делать определенным образом.Одна из вещей заключается в том, что мы накапливаем нераскрытые исключения до последней точки в Application_Error в global.asax, где когда дело касается того, что мы получаем все исключения, вложенные в объект исключения, и сериализуем эту информацию в базу данных.Есть код, который ходит по списку.Нет ни одного исключения.Может быть много вложенных исключений.Мы создаем приложения ASP.NET, где у нас есть эта обширная система регистрации исключений.Исключение происходит.Оно всплывает, где может случиться другое, окружая другого.Он всплывает до последней точки - Application_Error в global.asax, где есть вся эта логика, которая записывает информацию о машине в базу данных.Во время этого может возникнуть исключение, которое охватывает другие исключения

В моем случае WCF задействован ТОЛЬКО потому, что задействованные системы находятся в отдельных зонах, а WCF используется для связи.и вы НЕ МОЖЕТЕ сериализовать / передать объект исключений .NET через границу службы, поэтому я определил класс / структуру данных C # для представления исключений:

[DataContract]
public class ExceptionStructure
{
    [DataMember]
    public string Message { get; set; }

    [DataMember]
    public string StackTrace { get; set; }

    [DataMember]
    public List<ExceptionStructure> InnerException { get; set; }
}

Во-первых, эта структура может не работать, поскольку InnerExceptionЧИТАЙТЕ ТОЛЬКО, поэтому мне нужна помощь и в новом классе.Мне нужны только поля Message и StackTrace, а также InnerExceptions.

Все, что мне нужно, - это получить объект исключения .NET, который может иметь или не иметь внутренние исключения, может кто-нибудь помочь мне написать код, который будет заполнятьодин из этих классов ExceptionStructure?

Также было бы неплохо написать код для десериализации одного из них в список исключений .NET с другой стороны?Если вы видите лучшую идею структуры, не стесняйтесь.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

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

[ServiceContract]
public interface ICalculator
{
    [OperationContract]
    [FaultContract(typeof(DivideByZeroException))]
    int Divide(int n1, int n2);
}

public Calculator : ICalculator
{
    int Divide(int n1, int n2)
    {
        try
        {
            return n1/n2;
        }
        catch (DivideByZeroException ex)
        {
            throw new FaultException<DivideByZeroException>(ex);
        }
    }
}

РЕДАКТИРОВАТЬ: В вашем случае, так как вы говорите о коллекции исключений, вы можете попробовать сбой с AggregateException

0 голосов
/ 11 декабря 2010

Большинство, если не все, исключений можно сериализовать с помощью .NET Runtime Serialization (BinaryFormatter, SoapFormatter). Почему бы не сериализовать исключение в байтовый массив, отправить байтовый массив через провод с помощью WCF, а затем десериализовать обратно в экземпляры исключений на другой стороне?

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

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