Simple C # Data Algorithms Question – заполнение classа из classа Exception

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

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

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

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

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

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

Вы знакомы с ошибками 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(ex); } } } 

EDIT: В вашем случае, поскольку вы говорите о наборе исключений, вы можете попробовать скомпрометировать с помощью исключения AggregateException

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

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