Как контролировать серверное приложение .NET для критических исключений?

Я разрабатываю серверное приложение .NET, которое, как предполагается, работает непрерывно. Я хотел бы иметь уведомление по электронной почте, отправленное каждый раз, когда серверный процесс завершается по любой причине. Идеально электронная почта должна содержать сообщение об исключении и stacktrace, если бы исключение вызвало завершение. Я знаю, что определенные исключения не могут быть пойманы, такой как StackOverflowException. Таким образом, как Вы зарегистрировались бы / отправляют уведомление это a StackOverflowException произошедший в серверном процессе?

Я думаю вроде создания второго процесса контролировать серверный процесс. Но как это получило бы детали появления исключений?

5
задан shojtsy 29 January 2010 в 23:30
поделиться

4 ответа

Фатальные исключения, такие как StackoverFlowException, обычно приводят к записи в журнале событий Windows (возможно, даже в том числе в штабеле). Вы можете отслеживать свой журнал событий (например, другой сервис), который отправит электронное письмо на определенные записи. Приложение для мониторинга записей журнала событий описано здесь:

Инструмент мониторинга журнала событий в реальном времени

и здесь:

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

, если вы хотите, чтобы ваша служба Будьте непрерывно поднимаются и запущены, вы можете настроить его, чтобы автоматически перезапустить в случае, если он разбился (хотя вы должны знать, что обычно является причиной, по которой он разбился, и просто перезапустить, не обязательно удаляет эту причину). Вы можете сделать это на вкладке Recovery в разделе «Свойства обслуживания». Там у вас также есть возможность вызвать пользовательскую программу или сценарий в случае сбоя службы.

Другой вариант использования встроенных функций Windows - настроить журнал событий для отправки уведомления по электронной почте. Это работает, по крайней мере, от Windows Vista, как описано здесь:

Как настроить просмотр событий для отправки уведомления по электронной почте в Vista

4
ответ дан 14 December 2019 в 19:12
поделиться

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

http://msdn.microsoft.com/en-us/library/ms998306.aspx

http://www.4guysfromrolla.com/articles/031407-1.aspx

0
ответ дан 14 December 2019 в 19:12
поделиться

У меня есть приложение (показано код), который перехватывает необработанные исключения и отображает пользовательский диалог исключения, это может оказать некоторую помощь?

Imports BM.BEAST.Presenters
Imports BM.BEAST.Security
Imports BM.BEAST.Business
Imports System.Threading

Public Class StartUp

    Shared Sub UnhandledException(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)

        Dim unhandledException As New UnhandledExceptionView

        unhandledException.uxExceptionDetails.Text = e.Exception.ToString
        unhandledException.ShowDialog()

        If unhandledException.uxRestart.Checked Then
            Application.Restart()
        Else
            Application.Exit()
        End If

    End Sub
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Entry point
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Shared Sub Main()

        'All unhandled exceptions are handled by the sub UnhandledException()
        'which displays a BEAST exception dialog and gives the user the chance
        'to copy the error to clipboard for pasting into email etc..
        AddHandler Application.ThreadException, AddressOf UnhandledException

        'Application framework not enabled
        My.User.InitializeWithWindowsUser()

        'Users must be authenticated
        If My.User.IsAuthenticated Then

            Dim securityPrincipal As Security.ISecurityPrincipal = Nothing
            Dim applicationController As ApplicationController = Nothing

            Try
                'Custom security principal for use throughout the session
                securityPrincipal = ServiceGateway.Instance.StartUserSession

                AppDomain.CurrentDomain.SetThreadPrincipal(securityPrincipal)
                Thread.CurrentPrincipal = securityPrincipal

                applicationController = applicationController.GetInstance
                applicationController.RegisterNavigator(New ApplicationNavigator)

                'If a user holds more than 1 role they will have to select
                'the role they want applied for use throughout the session
                If securityPrincipal.Roles.Count > 1 Then applicationController.NavigateTo("SelectRoleView")
                applicationController.NavigateTo("ShellView")

            Catch ex As Exceptions.InvalidUserNameException
                MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Invalid User")
            Catch ex As Exceptions.UserDisabledException
                MsgBox(ex.Message, MsgBoxStyle.Exclamation, "User Disabled")
            Catch ex As System.Net.Sockets.SocketException
                MsgBox("The xxxxx Server is unavailable, contact the System Administrator.", MsgBoxStyle.Exclamation, "Server Unavailable")
            End Try

        Else
            MsgBox("User not authenticated, the application will terminate.", MsgBoxStyle.Exclamation, "Authentication")
        End If

        My.Settings.Save()
        Application.Exit()

    End Sub

End Class
0
ответ дан 14 December 2019 в 19:12
поделиться

На самом деле, вам не нужно какое-либо 3-е стороннее программное обеспечение, чтобы сделать это - планировщик задач Win7 может выстрелить запланированную задачу всякий раз, когда он видит определенный тип события, и написано необработанное исключение к журналу событий. Один из встроенных действий - «отправить электронное письмо», поэтому у вас все это решение в ОС

1
ответ дан 14 December 2019 в 19:12
поделиться
Другие вопросы по тегам:

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