PDA

Visualizza la versione completa : [c++]Servizi


giuseppe500
02-01-2012, 15:47
ciao.
Premetto che non so se la sezione giusta(non so se postare qui o in .net ma mi sembra una domanda piu generale , quindi legata a "programmazione" scusa alka se sbaglio) ma sto cercando di capire cosa sono i servizi.

Ho letto su google alcune definizioni , ma quello che non capisco la differenza tra un programma ad es con un timer(o con un thread) che ogni tot esegue delle operazioni e il servizio.

Io dovrei creare un programma che sta su un server e spazzola delle cartelle precise sula rete, recupera dei file xml da queste cartelle li processa e inserisce i dati estratti in una particolare maniera su un db.

per questo che ho pensato ad un servizio, ma essendo inesperto sull argomento chiedo a voi.

Ho visto inoltre che si possono creare questi servizi sia con ligguaggi ad alto livello( .net) sia con c++.

ho provato un po con c# in .net , sembra tutto semplice , ma il mio servizio nel task manager sembra impazzito , a volte occupa moltissime risorse a volte normale , ma non riesco ad avere il controllo e la pianificazione dell uso delle risorse della macchina(forse questa la differenza dal programma col timer).

Aggiungo inoltre che in c++ senza boost un po complicato gestire i thread e le risorse condivise.
da dove partire?

grazie.

MItaly
02-01-2012, 16:00
Originariamente inviato da giuseppe500
Ho letto su google alcune definizioni , ma quello che non capisco la differenza tra un programma ad es con un timer(o con un thread) che ogni tot esegue delle operazioni e il servizio.

Un programma "normale" vive dentro una sessione utente; nel momento in cui l'utente effettua il logout, tutti i programmi lanciati (direttamente o indirettamente) dalla sua sessione vengono terminati.

Il servizio invece viene lanciato dal service control manager, ed sempre in esecuzione (a meno che il SCM non gli dica di arrestarsi o di andare in pausa); i servizi inoltre normalmente non hanno interfaccia grafica e sono in comunicazione con il SCM con un sistema di callback, che gli recapita una serie di "eventi" (arresta il servizio, metti in pausa il servizio, ...) che vanno recapitati in maniera asincrona al thread che effettivamente svolge il lavoro (qui (http://forum.html.it/forum/showthread.php?s=&postid=13402832#post13402832) avevo descritto sommariamente il funzionamento di un servizio).

In aggiunta a ci, proprio perch i servizi non dipendono da una sessione utente, in genere vengono eseguiti con credenziali particolari, come LocalSystem (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684190%28v=vs.85%29.aspx) (lo pseudo-utente con massimi privilegi sul sistema, superiori anche ad Administrator), LocalService (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684188%28v=VS.85%29.aspx) (privilegi minimi e se si collega ad altri PC sulla rete viene visto con credenziali anonime) e NetworkService (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684272%28v=VS.85%29.aspx) (idem, ma viene visto sulla rete come "l'account del computer" - roba di Active Directory se non sbaglio).

In generale per pilotare un servizio si passa per il SCM (per le operazioni fondamentali di avvio/pausa/arresto) e per metodi di IPC (in genere socket).

In ogni caso, direi di partire dalla documentazione ufficiale (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685141%28v=VS.85%29.aspx).

giuseppe500
02-01-2012, 16:13
vacca!
una cosa "leggermente" piu complicata di quel che pensavo(utilizzare il wizard create service di c#).
mi sembra difficile da programmare in c++ , penso che utilizzero c#.
in ditta abbiamo solo il vs 2003 , ci sono molti cambiamenti , sto leggendo.
grazie MItaly

MItaly
02-01-2012, 16:20
Originariamente inviato da giuseppe500
vacca!
una cosa "leggermente" piu complicata di quel che pensavo(utilizzare il wizard create service di c#).
mi sembra difficile da programmare in c++ , penso che utilizzero c#.
C# ti nasconde un po' di dettagli (ti fornisce da subito un "vero main" impostato per la registrazione con l'SCM, accetta gli switch per l'installazione del servizio, ...) e se non ricordo male ti imposta da subito il ServiceMain in maniera comoda, poi i concetti di fondo (ricevere comandi dall'SCM, lanciare i worker thread separati & co.) ovviamente rimangono gli stessi.

in ditta abbiamo solo il vs 2003 , ci sono molti cambiamenti , sto leggendo.
Mah, sulle cose fondamentali dei servizi non dovrebbe essere cambiato molto...


grazie MItaly
:ciauz:

Loading