2009-02-24 3 views
11

Я отправляю сообщения об отсутствии необработанных исключений из global.asax. Как я могу получить путь и/или имя файла aspx или файла сборки, где исключение не было обработано.Необработанные исключения с Global.asax

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

Есть ли способ получить эту информацию, пока я создаю свой объект MailMessage в Global.asax?

Благодаря

ответ

12

Если это приложение ASP.NET, которое предлагает этот тег, вы должны иметь возможность сделать что-то вроде этого ... Ctx.Request.Url.ToString() предоставит вам имя файла, где произошла ошибка.

protected void Application_Error(object sender, EventArgs e) 
{ 
    MailMessage msg = new MailMessage(); 
    HttpContext ctx = HttpContext.Current; 

    msg.To.Add(new MailAddress("[email protected]")); 
    msg.From = new MailAddress("[email protected]"); 
    msg.Subject = "My app had an issue..."; 
    msg.Priority = MailPriority.High; 

    StringBuilder sb = new StringBuilder(); 
    sb.Append(ctx.Request.Url.ToString() + System.Environment.NewLine); 
    sb.Append("Source:" + System.Environment.NewLine + ctx.Server.GetLastError().Source.ToString()); 
    sb.Append("Message:" + System.Environment.NewLine + ctx.Server.GetLastError().Message.ToString()); 
    sb.Append("Stack Trace:" + System.Environment.NewLine + ctx.Server.GetLastError().StackTrace.ToString()); 
    msg.Body = sb.ToString(); 

    //CONFIGURE SMTP OBJECT 
    SmtpClient smtp = new SmtpClient("myhost"); 

    //SEND EMAIL 
    smtp.Send(msg); 

    //REDIRECT USER TO ERROR PAGE 
    Server.Transfer("~/ErrorPage.aspx"); 
} 
+0

Awesome. Благодаря! –

+0

HttpContext.Current.Url предоставляет вам текущий URL-адрес. Но вопрос задал путь и/или имя файла сборки. – RoadWarrior

+0

@RoadWarrior: Поскольку это приложение ASP.NET, вероятность того, что URL-адрес достаточно хорош. Поскольку он принял ответ, я предполагаю, что он отвечает его потребностям. – RSolberg

0

В Visual Studio, необходимо установить сборку выпуска для генерации отладочных символов. В отличие от сборки debug, это не задано по умолчанию. Это даст вам полную трассировку стека исключений.

Даже тогда оптимизация, выполняемая компилятором JIT (например, встраивание), может означать, что вы не получите правильный номер строки в трассировке стека. Если вы хотите быть уверенным в номере линии, вы также можете установить сборку выпуска без «оптимизации». Но это может означать, что ваше приложение имеет более низкую производительность и/или пропускную способность (последний имеет тенденцию быть более важным в веб-приложении).

EDIT: Вы можете найти настройку «генерировать отладочные символы», перейдя в окно Solution Explorer, щелкнув правой кнопкой мыши по проекту и выбрав пункт меню «Свойства». Затем перейдите в Configuration Properties> Build> Generating Debugging Information и установите значение true или false. Параметр «Оптимизировать код» находится в том же окне.

+0

Как это сделать? –