Белорусская цифровая библиотека





Сегодня в номере
  • Колонка редактора
    Новости
  • altWebDeveloper #5
  • Наши диски
  • Новые данные о популярности браузеров
  • HotLog изучает свою аудиторию
  • Microsoft представляет новое решение для локализации приложений
  • Конкурс для разработчиков - Финальная статистика конкурса
  • Червь Plexus использует наработки автора Mydoom
  • Sun все же переведет Java на принципы open-source
  • Информация о новой версии Longhorn
  • Вышла бета-версия Windows Media Player 10
  • Знакомиться в интернете становится модным
  • Новости .NET
  • "Десерт": Microsoft получила патент на изобретение двойного щелчка мышью
    Microsoft .NET
  • Углубление в C#
  • XML за 20 минут!
  • Программное создание шаблонов серверных элементов управления
  • Язык описания веб-сервисов (WSDL)
  • Internet Information Server (IIS) в вопросах и ответах
  • Построение Web-приложений средствами Visual Studio .NET
  • Создание GUID в ASP-приложении при помощи VB-компонента
  • Upload файлов с уникальными именами в ASP.NET
  • Уведомление о фатальной ошибке в приложении ASP.NET
    Web-promoting
  • Длинные доменные имена - не панацея, но используйте это!
  • Анализ спроса и повышение видимости в поисковых машинах
  • Как правильно проиндексировать сайт построенный на фреймах
  • Подготовка сайта для индексирования в поисковых системах
  • Технология поиска Google
    Дизайн
  • Этапы разработки сайта
  • 10 обманок наивного дизайнера
  • Как сделать баннер
    Design +
  • Как правильно выбрать дизайн-студию?
  • Составление цены на сайт - prise design
  • Анкета для заказчика
    Новые статьи
  • The Code Project
  • DotNetJunkies
  • Microsoft
    .NET on-line
  • Англоязычные сайты
  • Русскоязычные сайты
    Для души
  • От издателя
  • Виктор Пелевин
    Святочный киберпанк или "рождественская ночь-117.DIR"

  • Татьяна Матвеева
    DEEP DAWN

    Наши контакты
  • Реклама
  • Наши рассылки
  • Авторам, партнерам, редакторам
  • Сайт журнала Web
  • Студия web-дизайна Web
    Рассылка журнала

    Рассылки@Mail.ru
    Новости altWebDeveloper


    © 2004 CAS "altDesign"
    Все права защищены

  • ..: Microsoft.NET: Уведомление о фатальной ошибке в приложении ASP.NET :..

    Автор: Russ Nemhauser


    Ошибку можно исправить только если о ней знать. Многие пользователи не будут использовать вашу программу, если в ходе ее выполнения они наткнутся на ошибку, которая остановит работу приложения. Вот почему разработчику необходимо как можно раньше узнать о случае и месте возникновения проблемы для того чтобы по возможности устранить ее уже после первого случая появления. В этой статье мы рассмотрим вариант автоматического уведомления администратора приложения ASP.NET об произошедшей ошибке.

    Файл конфигурации web.config имеет секцию, называемую <CUSTOMERRORS>, которую мы можем использовать для того чтобы переадресовать (редирект) пользователя к заранее подготовленной странице с объяснением об обнаруженной проблеме. Причем мы можем даже определить различные страницы для каждого типа ошибки (404 - Файл не найден, и т.п.). Для начала создадим переадресацию к единой странице DefaultErrorPage.aspx. Для того, чтобы сделать, изменим наш web.config следующим образом:

    <customErrors defaultRedirect="DefaultErrorPage.aspx" mode="on">
    </customErrors>
    

    В зависимости от типа и назначения вашего приложения DefaultErrorPage.aspx может содержать либо детальное сообщение об ошибке, либо простое уведомление о "временном сбое в работе", в нашем примере для выполнения теста вы можете просто добавить одно слово "Error!".

    Теперь проверим как это все работает. Фатальную ошибку в работе приложения вызовем нарочно, например, при помощи SqlException (System.Data.SqlClient Namespace) путем попытки несуществующей БД. Для этого добавьте следующий код в процедуру Page_Load любого вашего скрипта.

    VB
    
    Dim c As SqlConnection = New SqlConnection _
    ("server=MyServer;database=IncorrectDatabase;user 
    id=MyUser;password=MyPassword")
    c.Open() 
    
    C#
    
    SqlConnection c = new SqlConnection("server=MyServer;database=IncorrectDatabase;user 
    id=MyUser;password=MyPassword");
    c.Open(); 
    

    Теперь решим, что было бы полезным знать о месте в котором произошла ошибка. Самое главное, это URL неработающей страницы с параметрами QueryString. Если ваше приложение использует аутентификацию Windows (Integrated Windows Authentication), т.е. интранет-приложение, то было бы интересным знать также и значение AUTH_USER объекта ServerVariables. Кроме того, нам потребуется наименование самого исключения (Exception) и трассировка StackTrace, которая может быть полезной для выявления точного места ошибочного кода в программе.

    Следующая вещь, которую мы должны сделать - это изменить файл global.asax для того, чтобы регистрировать нашу ошибку. В global.asax.vb (global.asax.cs) найдите процедуру Application_Error (или создайте ее, если она не существует). Эта процедура выполняется каждый раз, когда в приложении имеет место фатальная ошибка. Поместим в нее код, отсылающий e-mail-сообщение администратору сайта. В зависимости от того, какой язык вы используете (VB.NET или C#) для работы с e-mail вам потребуется сослаться на System.Web.Mail в файле global.asax.vb или global.asax.cs

    VB
    
    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim msg As MailMessage = New MailMessage()
        SmtpMail.SmtpServer = "MyMailServer"
        msg.Body = "Error: " & Server.GetLastError().InnerException.ToString() _
    	 & vbCrLf & vbCrLf & Request.Url
        msg.To = "webmaster@mycompany.com"
        msg.From = "errors@mycompany.com"
        msg.Subject = "Application Error"
        SmtpMail.Send(msg)
    End Sub 
    
    C#
    
    protected void Application_Error(Object sender, EventArgs e)
    { 
        MailMessage msg = new MailMessage();
        SmtpMail.SmtpServer = "MyMailServer";
        msg.Body = "Error: " + Server.GetLastError().InnerException.ToString()
    	 + "\n\n" + Request.Url;
        msg.To = "webmaster@mycompany.com";
        msg.From = "errors@mycompany.com";
        msg.Subject = "Application Error";
        SmtpMail.Send(msg);
    } 
    

    Попробуйте откомпилировать и запустить проект. Как видите, реализация подобного уведомления о проблемах в приложении довольна проста, и в то же время несет в себе большую возможность дать знать об ошибке разработчику сайта уже после первого случая ее возникновения, не дожидаясь когда после многочисленных неудач пользователи сами сообщат ему об этом.




    При перепечатке любого материала с журнала или с сайта, видимая ссылка на источник http://altwebdeveloper.nm.ru и все имена, ссылки авторов обязательны.

    © 2004 CAS "altDesign"
    © Валерий В. Макеев (deepInfinity)


    CAS "altDesign" - создание сайтов от простых домашних страничек до крупных сетевых порталов.



    @ library.by