Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Windows Service + Exceptions

Îåêßíçóå áðü ôï ìÝëïò M1ke. Τελευταία δημοσίευση από το μέλος darklynx στις 24-06-2009, 16:17. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  23-06-2009, 18:37 51955

    Windows Service + Exceptions

    Καλησπέρα.

    Έχω ένα .NET 2.0 windows service, γραμμένο σε C#.

    20 sec μετά το Start του Service τρέχει ένα System.Timers.Timer, το οποίο δεν κάνει τίποτα άλλο από ... throw new Exception("Boom");

    To Exception αυτό δεν φαινεται πουθενά.. ενώ έχω προσθέσει handler στο AppDomain.CurrentDomain.UnhandledException, και το Service έχει το AutoLog = true.

    Πως μπορώ να δω το Exception? Η δοκιμή έγινε και σε Debug και σε Release.

     

    ΥΓ. Η παραπάνω δοκιμή γίνεται ως test,  γιατί το Service γίνεται σταματάει σε ένα Windows Server 2003 χωρίς κανένα ίχνος.


    I think there's to much blood in my caffeine system..
  •  23-06-2009, 19:18 51956 σε απάντηση της 51955

    Απ: Windows Service + Exceptions

    Θα σου πρότεινα να φτιάξεις ένα δικό σου ApplicationEventLog κι εκεί να βάζεις τις πληροφορίες σου σε περίπτωση exception!

    Θα μπορούσες ακόμη και σε αρχείο, ότι προτιμάς.

     


  •  24-06-2009, 00:32 51965 σε απάντηση της 51956

    Απ: Windows Service + Exceptions

    Βασικά έχω δικό μου ApplicationLog, που γράφει σε βάση δεδομένων, αρχείο και τον EventLogger του System.Diagnostics. Το πρόβλημα είναι το εξής:

    Έχω ένα windows Service, που κληρονομεί από το ServiceBase. Αυτό έχει ως private πεδίο ένα System.Timers.Timer, που γίνεται create OnStart().

    Μέσα στην OnStart κάνω subscribe στο AppDomain.CurrentDomain.UnhandledException Event, ώστε να μπορώ να πιάσω Exceptions που δημιουργούνται εκτός κάποιου try-catch block.

    Ως test έκανα το εξής:

    private timer_tick(object sender, EventArgs e)
    {
        throw new Exception("testing UnhandledException catch.");
    }

    Το πρόβλημα είναι ότι το exception αυτό δεν γίνεται πουθενά catch (ούτε από τον handler του UnhandledException). To Service συνεχίζει και τρέχει κανονικά. Ο κώδικας ήταν ο ίδιος και με reflector, οπότε δεν υπάρχει περίπτωση να "εφαγε" την γραμμή ο compiler. Που πήγε το Exception?


    I think there's to much blood in my caffeine system..
  •  24-06-2009, 03:26 51966 σε απάντηση της 51965

    Απ: Windows Service + Exceptions

    Χμμ...ο System.Timers.Timer έχει ως χαρακτηριστικό ότι σηκώνει δικό του worker thread για την εκτέλεση του event.Τα unhandled exceptions σε threads τις κάνουν να τερματίζουν σιωπηλά και το exception δεν συνεχίζει την εκτέλεσή του.Ίσως αυτή να είναι η απάντηση;Δοκίμασε με τον timer των Windows Forms και πες μας αν έχει διαφορά.

    EDIT:Αν αυτή είναι η φύση του προβλήματος η λύση θα είναι η εξής:

    Application.ThreadException += new ThreadExceptionEventHandler(OnThreadException);
  •  24-06-2009, 11:46 51972 σε απάντηση της 51966

    Απ: Windows Service + Exceptions

    Δοκίμασα και με τους 3 timers (στα assemblies Timers, Windows.Forms και Threading), με τους Handlers του Application και του AppDomain, στους οποιους έκανα attach είτε πριν κάνω Run το service (στη main) είτε στον constructor του service.

    Forms.Timer: Σαν να μην κάνει tick. Δείτε και εδω: support.microsoft.com/kb/820639

    Timers.Timer: Δουλεύει κανονικά, αλλά τα unhandled exceptions του φαίνονται μόνο όταν κάνω attach τον debugger, αλλά δεν γίνονται catch από τους handlers.

    Threading.Timer: Δουλεύει κανονικά, και τα exceptions γίνονται catch. Το πρόβλημα είναι ότι είναι αρκετά πιο δύσκολος στη χρήση.

     


    I think there's to much blood in my caffeine system..
  •  24-06-2009, 16:17 51974 σε απάντηση της 51972

    Απ: Windows Service + Exceptions

    Μπορεί να είναι άσχετο αλλά τουλάχιστον θα ικανοποιήσει την περιέργειά μουStick out tongue:

    το property SynchronizingObject του System.Timers.Timer όταν το έβαλες στο service τι τιμή πήρε;

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems