Вы используете ErrorSignal.Raise
с неисключенным исключением, которое вы только что new
подняли. Трассировка стека заполняется, когда вы генерируете исключение, поэтому у вашего неисключенного исключения не будет трассировки стека. ELMAH, с другой стороны, будет перехватывать экземпляр исключения, который вы здесь переносите - который, если вы посмотрите на него в отладчике, фактически будет содержать трассировку стека, в отличие от исключения переноса.
Вместо включения в исключение System.ApplicationException (которое, кстати, изначально должно было иметь , унаследованное от , а в настоящее время считается разработчиками фреймворка устаревшим ), вам следует просто поднять оригинальное исключение, которое вы поймали.
В качестве интересного примечания: поскольку трассировка стека заполняется при выдаче исключения, это:
catch (Exception ex) {
throw ex;
}
уничтожит исходную трассировку стека, тогда как
catch (Exception ex) {
throw;
}
не будет (последний бит выдаст код операции CIL rethrow
, который сохраняет исходную трассировку стека).