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

 

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

Τερματισμός υπηρεσίας

Îåêßíçóå áðü ôï ìÝëïò m6s. Τελευταία δημοσίευση από το μέλος anjelinio στις 26-11-2009, 17:20. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-11-2009, 11:45 55161

    Τερματισμός υπηρεσίας

    Καλημέρα...
    Υπάρχει μια εφαρμογή που εκκινήται σαν υπηρεσία. Η συγκεκριμένη εφαρμογή, με το OnStart(), ξεκινά ένα εξωτερικό πρόγραμμα ( Java ) με μια κλήση Process.
    Κρατάω πάντα μια αναφορά στην κλάση τόσο για την εφαρμογή της Java όσο και για την ίδια την υπηρεσία που ξεκίνησε το εξωτερικό πρόγραμα.

    Όταν σταματώ την υπηρεσία μου λένε τα windows, δεν είναι δυνατό να διακόψουν την υπηρεσία η υπηρεσία δεν επέστρεψε σφάλμα, θα μπορούσε να είναι εσωτερικό σφάλμα των windows ή της υπηρεσίαςTongue Tied Οκ, είναι δικό μου. Αλλά δεν καταλαβαίνω γιατί. ConfusedΤο παράδοξο, αν κάνω δεύτερη προσπάθεια να την σταματήσω, σταματάει η υπηρεσία, χωρίς να τερματίζει και η εφαρμογή της Java, δίνοντας και ένα μήνυμα ότι δεν ήταν δυνατό να διακόψουν την υπηρεσία τα windows!!! Αλλά υπηρεσία τελικά δεν υπάρχει, και η Java συνεχίζει...Wilted Flower
    Και ολίγο κώδικας:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    protected override void OnStop() {
    			// TODO: Add code here to perform any tear-down necessary to stop your service.
    			eventLog1.WriteEntry("Stopping.Service....");
    			proc.Close();
    			if ( !proc.HasExited ) {
    				proc.Kill();
    				eventLog1.WriteEntry("Killed.Java");
    			}else
    				eventLog1.WriteEntry("Stoped.Java");
    			eventLog1.WriteEntry("Service shell. Terminating...");
    //Αυτό είναι μια επιπλέον ενέργεια που σκέφτηκα...
    			IEnumerator itr = serviceProcess.Modules.GetEnumerator();
    			while ( itr.MoveNext() ) {
    				( (Process) itr.Current ).Kill();
    			}
    			eventLog1.WriteEntry("Service shell. Terminated");
    		}



  •  19-11-2009, 20:24 55307 σε απάντηση της 55161

    Απ: Τερματισμός υπηρεσίας

    Και ο κώδικας με τον οποίο ξεκινάς το Java Process?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  20-11-2009, 12:00 55335 σε απάντηση της 55307

    Απ: Τερματισμός υπηρεσίας

    (κάποιο πρόβλημα είχα με την εισαγωγή κώδικα το περνάω "χύμα", το OnStart() ( Κρατώ πολύ logging, επειδή η java ξεκινάει με ειδικές παραμέτρους που διαβάζονται σε κάποιο xml οπότε γράφω και στο log ) :
    string xml2use = string.Empty; string class2use = string.Empty; string port2use = ConfigurationManager.AppSettings["PORT"]; eventLog1.WriteEntry("Java"); // TODO: Add code here to start your service. xml2use = ConfigurationManager.AppSettings["javaXML"]; class2use = ConfigurationManager.AppSettings["javaClass"]; eventLog1.WriteEntry("Java XML used"); ClassPath.ClassPath.Set(System.Configuration.ConfigurationManager.AppSettings, eventLog1); try { string stringed = string.Format(@"-Dapp.context=file:{0}\config\{1} -Dhome=. {2} {3}", ConfigurationSettings.AppSettings["JAVA_EXE_DIR"], xml2use, class2use, port2use); eventLog1.WriteEntry("Java. Parameters to engage :" + stringed); Process proc = ProcessRun(new Process(), @"java", stringed); if ( proc.Start() ) { eventLog1.WriteEntry("Java." + class2use + " as process id :" + proc.Id); } } catch ( Exception ex ) { eventLog1.WriteEntry(ex.StackTrace); eventLog1.WriteEntry(ex.Message); if ( ex.InnerException != null ) { eventLog1.WriteEntry(ex.InnerException.Message); } }

    Το proc είναι που συναντάς στην OnStop()

  •  25-11-2009, 13:59 55469 σε απάντηση της 55335

    Απ: Τερματισμός υπηρεσίας

    Θέλω να προσθέσω ότι ναι μέν έκανα και το λάθος να ΄δημιουργώ τοπικά στην συνάρτηση το αντικειμένο proc, και παρόλο ότι το διόρθωσα, το stop δεν δουλεύει σωστά, αλλά το restart της υπηρεσίας πετυχαίνει με....3600 μηνύματα λάθους στο log.

    "Ελαττωματική εφαρμογή MyDemo Service.exe, έκδοση 1.0.0.0, χρονική σήμανση 0x4b07ea89, ελαττωματική λειτουργική μονάδα KERNEL32.dll, έκδοση 6.0.6002.18005, χρονική σήμανση 0x49e037dd, κωδικός εξαίρεσης 0xe053534f, μετατόπιση σφάλματος 0x0003fbae, αναγνωριστικό διεργασίας 0x%9, χρόνος έναρξης εφαρμογής 0x%10."
  •  26-11-2009, 17:20 55493 σε απάντηση της 55469

    Απ: Τερματισμός υπηρεσίας

    Θα ήταν νομίζω χρήσιμο για 'σένα αν μπορούσες να κάνεις debug το service σου, για να δείς που ακριβώς σκάει το Exception. Ίσως απο 'κεί οδηγηθείς σε συμπεράσματα, γιατί το log σου δε λέει και πολλά - ή μάλλον πολλά λέει, λίγα χρήσιμα όμως :D

    Αν ψάξεις στα forums του DNZ, σίγουρα θα βρείς κάποιο παλιό post ( το είχα διαβάσει δηλαδή ) που εξηγεί πως μπορείς να κάνεις debug ένα service ( αν θυμάμαι καλά η λύση ηταν να το τρέξεις ως .. console app Big Smile )


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