2010-01-29 12 views
5

मैं एक .NET सर्वर अनुप्रयोग विकसित कर रहा हूं, जिसे लगातार चलाना है। जब भी किसी भी कारण से सर्वर प्रक्रिया समाप्त हो जाती है, तो मैं एक अधिसूचना ईमेल भेजना चाहता हूं। आदर्श रूप से ईमेल में अपवाद संदेश और स्टैकट्रैक होना चाहिए यदि अपवाद को समाप्त कर दिया गया हो। मुझे पता है कि कुछ अपवादों को पकड़ा नहीं जा सकता है, जैसे कि StackOverflowException। तो आप सर्वर प्रक्रिया में StackOverflowException पर अधिसूचना कैसे लॉग/भेज देंगे?घातक अपवादों के लिए .NET सर्वर एप्लिकेशन की निगरानी कैसे करें?

मैं सर्वर प्रक्रिया की निगरानी करने के लिए दूसरी प्रक्रिया बनाने की लाइनों के साथ सोच रहा हूं। लेकिन यह अपवादों का विवरण कैसे प्राप्त होगा?

उत्तर

0

मेरे पास एक एप्लिकेशन (कोड दिखाया गया है) जो अनचाहे अपवादों को रोकता है और एक कस्टम अपवाद संवाद प्रदर्शित करता है, यह कुछ मदद की हो सकती है?

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

मैं एक स्वास्थ्य मॉनीटर को लागू करने की सिफारिश करता हूं। उन अपवादों के लिए लॉग होना अच्छा होता है जिन्हें आप अनुमानित और नियंत्रित करने में सक्षम हो सकते हैं, लेकिन आप अंतर्निहित स्वास्थ्य निगरानी ढांचे का उपयोग करके अपर्याप्त लोगों को पकड़ने के लिए अपने आवेदन को कॉन्फ़िगर कर सकते हैं।

http://msdn.microsoft.com/en-us/library/ms998306.aspx इस तरह के एक StackOverflowException रूप

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

+0

धन्यवाद में आपका पूरा समाधान मिल गया है, लेकिन हमारा ऐप एएसपी.Net नहीं है, केवल नेट। हमारे पास Web.config भी नहीं है जहां इसे कॉन्फ़िगर किया जाना चाहिए – shojtsy

+0

@shotjsy: शायद ऐसा कुछ ऐसा हो सकता है? http://www.codeproject.com/KB/exception/UnhandledExceptionClass.aspx –

4

घातक अपवाद आमतौर पर (शायद भी स्टैकट्रेस सहित) विंडोज ईवेंट लॉग में एक प्रविष्टि का परिणाम देगा। आप अपने इवेंट लॉग (जैसे किसी अन्य सेवा के साथ) की निगरानी कर सकते हैं जो कुछ प्रविष्टियों पर एक ईमेल भेज देगा। निगरानी घटना लॉग प्रविष्टियों के लिए एक सरल आवेदन यहाँ वर्णित है:

A realtime event log monitoring tool

और यहाँ:

Send email alerts when errors are written to the event log

यदि आप चाहते हैं आपकी सेवा लगातार चलने और चलने के लिए इसे क्रैश होने पर स्वचालित रूप से पुनरारंभ करने के लिए कॉन्फ़िगर करना चाहती है (हालांकि आपको पता होना चाहिए कि आमतौर पर यह कारण है कि यह क्रैश हो गया है और बस पुनरारंभ करना आवश्यक नहीं है)। आप रिकवरी सेवा गुणों के अंतर्गत टैब पर ऐसा कर सकते हैं। सेवा क्रैश के मामले में आपके पास कस्टम प्रोग्राम या स्क्रिप्ट को कॉल करने का विकल्प भी है।

अंतर्निहित विंडोज सुविधाओं का उपयोग करने का एक और विकल्प इवेंट लॉग को ईमेल अधिसूचना भेजने के लिए कॉन्फ़िगर करना है। यह, पर Windows Vista से कम से कम काम करता है के रूप में यहाँ वर्णित:

How to Setup Event Viewer to Send a Email Notification in Vista

1

असल में, आप किसी भी 3 पार्टी सॉफ्टवेयर बिल्कुल ऐसा करने की जरूरत नहीं है - Win7 कार्य शेड्यूलर सक्रिय कर सकता है एक निर्धारित कार्य जब भी यह किसी निश्चित प्रकार की घटना को देखता है, और इवेंट लॉग में एक अनचाहे अपवाद लिखा जाता है।अंतर्निहित कार्यों में से एक "ईमेल भेजें" है, इसलिए आपको ओएस

संबंधित मुद्दे