Желтый экран смерти (YSOD) ASP.NET может быть сгенерирован по требованию или получен?

Часть 1

Если вы хотите посчитать количество уникальных идентификаторов и некоторые идентификаторы повторяются в группах

dat[, .(n_ids = uniqueN(id)), group]

Если идентификаторы не повторяются в группах или вы не хотите чтобы подсчитать их уникально

dat[, .(n_ids = .N), group]

Часть 2

Если идентификаторы повторяются внутри групп, и вы хотите вернуть все строки для случайно выбранного идентификатора в каждой группе

dat[dat[, .(id = sample(id, 1)), group], on = .(id, group)]

Если идентификаторы не повторяются или вы все равно хотите только одну строку на группу

dat[dat[, sample(.I, 1), group]$V1]

Благодаря комментарию Фрэнка вы также можете сделать второй вариант для частей 1 & amp; 2 выше в одной строке. Это возвращает строку, подобную dat[dat[, sample(.I, 1), group]$V1], но также добавляет столбец N, показывающий количество идентификаторов (предполагается, что он равен числу строк в группе)

dat[sample(.N), c(.SD[1], .N), keyby=group]
6
задан Tim Sylvester 16 July 2009 в 22:50
поделиться

5 ответов

Я бы посмотрел на ELMAH (Модули регистрации ошибок и обработчики для ASP.NET) :

ELMAH (Модули регистрации ошибок и Обработчики) - это ошибка всего приложения лесозаготовительный комплекс, полностью подключаемый. Его можно динамически добавлять в работающее веб-приложение ASP.NET, или даже все веб-приложения ASP.NET на машине, без необходимости повторная компиляция или повторное развертывание.

После того, как ELMAH был помещен в запущено веб-приложение и настроено соответственно, вы получите следующее объектов без изменения ни одного строка вашего кода:

  • Регистрация почти всех необработанных исключений.
  • Веб-страница для удаленного просмотра всего журнала перекодированных исключений.
  • Веб-страница для удаленного просмотра полных сведений о любом зарегистрированном исключение.
  • Во многих случаях вы можете просмотреть исходный желтый экран смерти. что ASP.NET сгенерировал для данного исключение, даже в режиме customErrors выключено.
  • Уведомление по электронной почте о каждой ошибке в момент ее возникновения.
  • RSS-канал с последними 15 ошибками из журнала.
9
ответ дан 8 December 2019 в 04:31
поделиться

Вы слышали об ELMAH? Это может дать вам все функции, которые вам действительно нужны ...

Вот сообщение в блоге, которое немного объясняет об этом: http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

3
ответ дан 8 December 2019 в 04:31
поделиться

Вы должны проверить ELMAH , он автоматически выполняет то, что вы просите.

2
ответ дан 8 December 2019 в 04:31
поделиться

Я бы сказал, что в целом вы не хотите, чтобы пользователь испытал YSOD. Это то, что я раньше вставлял в веб-приложения, чтобы зафиксировать ошибку, а затем предоставить пользователю более изящную страницу ошибки ...

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

    msg.To.Add(new MailAddress("me@me.com"));
    msg.From = new MailAddress("from@me.com");
    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");
}
2
ответ дан 8 December 2019 в 04:31
поделиться

Событие Application_Error в файле Global.asax запускается всякий раз, когда в приложении возникает необработанное исключение. Вы можете получить последнее возникшее исключение с помощью метода Server.GetLastError ().

Аналогичным образом, вы можете создать свою собственную страницу ошибок, указав ее в web.config в разделе customErrors файла web.config. Указав файл по умолчанию, вы можете выполнить любое пользовательское кодирование, когда туда перенаправляется исключение.

1
ответ дан 8 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: