Как реализовать автоматический отчет об ошибках / сбоях для веб-приложения ASP.NET? - PullRequest
5 голосов
/ 01 февраля 2009

Каждый, вероятно, замечает, что в большинстве современных приложений в настоящее время пользователь может отправлять отчеты об ошибках / ошибках либо автоматически, либо с разрешения пользователя. Некоторыми примерами являются Mozilla Crash Reporter или большинство приложений Microsoft.

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

Интересно, существует ли простой или систематический способ реализации этой возможности в веб-приложении ASP.NET.

У вас, ребята, есть опыт или знания, которыми вы могли бы поделиться как для WebForms, так и для приложений MVC? Или, если это может быть реализовано на стороне клиента, как JavaScript / JQuery, это было бы хорошо.

Спасибо!

Ответы [ 5 ]

7 голосов
/ 01 февраля 2009

ASP.NET 2.0 представил мониторинг работоспособности, который позволяет вам сделать это, просто добавив некоторые вещи в web.config. Смотри: http://msdn.microsoft.com/en-us/library/ms998306.aspx

Он может войти в почту, sql, eventlog и т. Д. И позволяет устанавливать буферы. Так, например, он не убьет ваш почтовый сервер, если база данных sql выйдет из строя или если какой-то пользователь обнаружит ошибку и попытается вызвать ее слишком часто в секунду: -)

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

4 голосов
/ 01 февраля 2009

ELMAH - это библиотека, которая подключается и обнаруживает исключения. Вы также можете зарегистрировать событие самостоятельно. События и большое количество данных, таких как параметры URL-адресов и информация браузера, могут быть отправлены администраторам по электронной почте и при необходимости сохранены в базе данных для отображения. (Скорее, как журнал событий для веб-сайта.) У него нет встроенной пользовательской формы, которую я видел, но, вероятно, ее можно расширить, добавив такую ​​опцию.

Я использую / настраиваю его уже около двух лет, и он действительно исключительный.

Другим вариантом может быть использование Kampyle , которое включает в себя поле обратной связи в правом нижнем углу вашего веб-сайта. Вы можете использовать Javascript, чтобы окно появилось, если на веб-сайте обнаружена проблема.

1 голос
/ 01 февраля 2009

Вы можете ознакомиться с моим руководством о том, как реализовать регистрацию исключений в asp.net - http://jesal.us/blog/index.php/2008/04/08/exception-logging-using-the-database/

1 голос
/ 01 февраля 2009

Ваши ошибки будут проходить через метод Application_Error файла Global.asax.cs (который вам, возможно, придется создать). Я использую этот факт, чтобы зафиксировать ошибку и записать ее в базу данных:

void Application_Error(object sender, EventArgs e)
{
    try
    {
        SqlConnection errConnection = new SqlConnection("Your connection string");

        // After setting up a command object, I call a stored procedure to save information about
        // the crash.  I pass two primary arguments.  The first is the URL:
        errCommand.Parameters.Add("@URL", SqlDbType.VarChar).Value = Request.Url.ToString();

        // The second is the error information.
        errCommand.Parameters.Add("@EI", SqlDbType.Text).Value = Server.GetLastError().ToString();

        // I pass some other information from my session as well...

       // After setting up an output parameter called ErrorID, I call the command...
       errCommand.ExecuteNonQuery();
       // Now Error ID is stored in the session.
       Session["ErrorID"] = (int)ErrorID.Value;
    }
    catch { } //  I do NOT want the error handling call to throw an error.
}

Теперь вы должны настроить файл Web.Config так, чтобы конкретная страница получала контроль при возникновении ошибки. На этой странице вы будете проверять сеанс на наличие идентификатора ошибки и показывать его пользователю. В выводе я прошу пользователя записать ошибку, если он хотел бы позвонить нам для получения дополнительной информации. Если мы получим запрос, я могу зайти в базу данных и получить полную информацию об ошибке.

1 голос
/ 01 февраля 2009

Для приложения ASP.NET - или любого другого веб-приложения - это не просто двухэтапный процесс

  1. регистрация ошибки (очевидно); и
  2. Поместите форму в документ об ошибке, чтобы пользователь мог ввести отзыв.

Или есть еще что-то?

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