Servizio win parte... ma si stoppa subito!

lunedì 26 gennaio 2009 - 15.47

050782 Profilo | Junior Member

Ho creato un Windows Service (VS 2008) contenente un timer, che deve eseguire delle operazioni al "tick" del timer appunto.
Ho installato il servizio, ma quando lo avvio mi viene fuori questo messaggio:
"Il servizio [NomeServizio] su computer locale si è avviato, quindi si è interrotto. Alcuni servizi si interrompono automaticamente se non vi sono operazioni da eseguire, ad esempio il servizio Avvisi e registri di prestazioni"

Qualcuno sa spiegarmelo???
Grazie

luigidibiasi Profilo | Guru

Ciao,

Potrebbe essere un problema nella ruotine del timer... controlla la proprietà enabled e assicurati che sia sempre su true

Se puoi posta il codice di inizializzazione del servizio...

Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

050782 Profilo | Junior Member

anche con l'impostazione Enabled=True del timer ho lo stesso messaggio.

il codice è questo
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

luigidibiasi Profilo | Guru

Ciao,
ti posto la struttura della classe che utilizzo come base per creare i servizi windows...
l'evento tick mi suona strano in questo contesto... magari è quello che non và..

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

R3GM4ST3R Profilo | Junior Member

Ciao!
Ma gli hai dato almeno un giro in debug?

Per poter eseguire il debug di un windows service devi modificare il file [nomeservizioprincipale].Designer.vb

' Il punto di ingresso principale del processo
<MTAThread()> _
<System.Diagnostics.DebuggerNonUserCode()> _
Shared Sub Main()

#If Not Debug Then
'//Sono in funzionamento normale, quindi il servizio è già installato in windows
Dim ServicesToRun() As System.ServiceProcess.ServiceBase
ServicesToRun = New System.ServiceProcess.ServiceBase() {New srvMain}
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
#Else
'//Sono in DEBUGMODE, quindi devo creare un nuovo servizio ed avviarlo con gli appositi parametri (per ora nessuno)
Dim o_Service As New [nomeservizioprincipale]
o_Service.OnStart(New String() {""})
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite)
#End If
End Sub

Cmq mi sembra strano che si stoppi subito!

Il timer dovrebbe continuare a generare eventi...

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

050782 Profilo | Junior Member

effettivamente entrando in debug, non entra mai nell'evento Timer_Tick

prima di creare questo win service, avevo fatto delle prove con una win application e l'evento veniva richiamato regolarmente ogni x secondi impostati nel timeinterval del timer...
gli unici eventi disponibili per l'oggetto Timer sono il Dispose e questo Tick

PS: forse mi sono dimenticata di dire che lavoro con VS 2008

luigidibiasi Profilo | Guru

Anche io uso VS2008
ti ho allegato il progetto da cui parto ( devi cambiare i nomi dei servizi ) per crearmi i servizi.

Trovi l'evento Timer.elapsed in cui puoi inserire il codice che vuoi far eseguire


Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

050782 Profilo | Junior Member

grazie Luigi!
il problema era l'oggetto Timer, che nella mia casella strumenti è un oggetto di "System.Windows.Forms.Timer", mentre quello usato da te è un "System.Timers.Timer"
Ora entra in debug!!

050782 Profilo | Junior Member

il debug va bene ora... ma quando lo avvio come servizio di windows dà sempre lo stesso problema... parte e si stoppa

luigidibiasi Profilo | Guru

Ciao,
se non ti crea problemi prova a postare l'intero progetto magari riusciamo a trovare il problema così....
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

050782 Profilo | Junior Member

ho dovuto cancellare le url dei webservice collegati e i valori impostati nel file config.xml... spero vada bene comunque

luigidibiasi Profilo | Guru

Ciao,
allora appena possibile provo a installarlo.. ho dato un'occhiata e nella classe ServiceSendSMS.vb
(se la apri in fase di progettazione) ho notato che la proprietà ServiceName è impostata su Service1

Prova a impostarla su wsManageSMS cioè il nome che gli dai nella classe ProjectInstaller


Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

050782 Profilo | Junior Member

si me ne sono accorta subito dopo il post e l'ho cambiato sperando fosse quello il problema, ma niente...

050782 Profilo | Junior Member

è andato!!!
a volte non mi capacito di me stessa per le stupidaggini che faccio... finalmente ho avuto la brillante idea di controllare il registro eventi e c'era un bellissimo errore nel lancio del mio servizio perchè non trovava il file XML che deve andare a leggere
lanciando il servizio lo cerca automaticamente in C:\nomefile.xml

luigidibiasi Profilo | Guru

>> ops... scusa non avevo visto la risposta <<

Credo che il problema sia qui
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

messo il try funziona....
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

050782 Profilo | Junior Member

grazie mille per il supporto!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5