Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Creazione di un servizio
giovedì 20 novembre 2008 - 23.07
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
gio 20 nov 2008 - 23:07
Salve,
sto progettando un applicazione che fa il parsing di file in xml, li rielabora e li inserisce un db sql 2000
attraverso una serie di transazioni, memorizza eventuali errori di inserimento che poi saranno monitorati
attraverso una pagina web.
mi chiedevo poiche questa applicazione dovra essere a lavoro 24 h su 24, che vantaggi avre se ovviamente
vantaggi ci sono a creare un windows service piuttosto che un applicazione, da premettere che non ho mai
lavorato con i service, però mi hanno posto la domanda!
accetto opinioni e consigli Saluti!
--------------------
Vincenzo PESANTE
Software Engineer
tonyexpo
Profilo
| Senior Member
229
messaggi | Data Invio:
ven 21 nov 2008 - 18:32
Ciao
i Windows Service sono delle applicazioni che possono effettuare compiti "long-running" (H24) molto meglio di un'applicazione windows.
Le differenze principali sono:
1) Non necessitano di login al pc/server
2) Possono girare con un'utenza ad hoc (di solito di servizio)
3) Sono gestibili da apposito pannello con possibilità di impostare tipo di avvio e quant'altro. Interessante è la possibilità di avviare il servizio in automatico anche dopo un eventuale crash del sistema o dell'applicazione.
Ovviamente lo sviluppo deve tenere presente la diversa architettura, ma nel tuo caso la preferirei molto ad altre possibiltà (win), escluso ovviamente altre tecnologie service-oriented.
Se vuoi approfondire, chiedi pure
Antonio Esposito
MCP, MCTS .NET 2.0 Distributed applications
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
ven 21 nov 2008 - 19:57
Beh ripeto non ho mai creato win services,
ho visto l'esempio che c'è su questo sito, sembre uguale alle win app,
dovrei solo inserire il codice di load nell'evento onstart,
poi la connessione sql rimarrebbe tutto uguale giusto?
ciao
--------------------
Vincenzo PESANTE
Software Engineer
R3GM4ST3R
Profilo
| Junior Member
196
messaggi | Data Invio:
lun 1 dic 2008 - 22:23
Ciao, tieni presente che il windows service ha solo 2 eventi, ONSTART e ONSTOP, non ha interfaccia grafica, quindi ti consiglio vivamente di usare Eventlog, e quindi di crearti un nuovo registro eventi per il tuo servizio (in modo che non vada ad "imputtanarti" gli altri registri base di sistema)
Altra dritta, tieni presente che i servizi generalmente partono con l'account local system, quindi se ti interfacci ad un database ricordati di aggiungere l'utente corretto al database...mmm poi vediamo che altro...ah per effettuare il debug di un windows service ricordati di modificare la classe principale di avvio
Esempio c#
#if (!DEBUG)
// Sono in esecuzione normale
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
#else
// Sono in debug-mode
Service1 service = new Service1();
service.Start(); //Start è la funzione principale di avvio
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#endif
Ciaux
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
gio 4 dic 2008 - 19:40
Ciao hai qualche esempio da sottopormi?
saluti
--------------------
Vincenzo PESANTE
Software Engineer
R3GM4ST3R
Profilo
| Junior Member
196
messaggi | Data Invio:
ven 5 dic 2008 - 10:20
859_TestService.zip
Ciao Vincenzo,
ecco un esempio in vb.net di un windows service
spero di averlo commentato in modo decente
se hai domande fai pure
ciauz
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
ven 5 dic 2008 - 14:37
CIao io uso vs.2003, cmq mi studiero' il tuo esempio, probabilmente posso usare quei metodi anche col frmk 1.1,
>Ciao, tieni presente che il windows service ha solo 2 eventi,
>ONSTART e ONSTOP, non ha interfaccia grafica, quindi ti consiglio
>vivamente di usare Eventlog, e quindi di crearti un nuovo registro
>eventi per il tuo servizio (in modo che non vada ad "imputtanarti"
>gli altri registri base di sistema)
mi devo studiare un po' gli Eventlog, poiche io avevo previsto cmq di importare quasiasi tipo di errore in un file xml,
che poi avrei dovuto leggere attraverso una web application.
>Altra dritta, tieni presente che i servizi generalmente partono
>con l'account local system, quindi se ti interfacci ad un database
>ricordati di aggiungere l'utente corretto al database...mmm poi
poiche devo collegarmi ad un db SQL srv 2000 usero' una connessione sql connection, questo dovrebbe esonerarmi dal problema giusto?
>vediamo che altro...ah per effettuare il debug di un windows
>service ricordati di modificare la classe principale di avvio
>Esempio c#>
ho visto nell' esempio ad un certo punto suggerisci di usare un timer, poiche devo ciclare 24h su 24 delle cartelle potrei usare anche un ciclo for infinito?
Per l'installazione non si potrebbe fare un pacchetto?
saluti e grazie
--------------------
Vincenzo PESANTE
Software Engineer
R3GM4ST3R
Profilo
| Junior Member
196
messaggi | Data Invio:
ven 5 dic 2008 - 20:43
Ciao Vincenzo,
dunque :
>mi devo studiare un po' gli Eventlog, poiche io avevo previsto cmq di importare quasiasi tipo di errore in un file xml,
>che poi avrei dovuto leggere attraverso una web application.
Gli errori di parsing dei file xml è meglio che te li salvi in una tabella del database, in modo che poi tramite una banale pagina aspx te li tiri su con una query e bona...
>poiche devo collegarmi ad un db SQL srv 2000 usero' una connessione sql connection, questo dovrebbe esonerarmi dal problema giusto?
Giusto, se l'istanza di sqlserver risiede nella stessa macchina dove girerà il servizio non hai di che preoccuparti. (almeno in teoria :D)
>ho visto nell' esempio ad un certo punto suggerisci di usare un timer, poiche devo ciclare 24h su 24 delle cartelle potrei usare anche un ciclo for infinito?
beh diciamo che un ciclo for o while infinito bloccano l'elaborazione degli altri eventi che potrebbero scatenarsi durante l'esecuzione del servizio e potrebbero portare all'instabilità del servizio stesso, quindi ti consiglierei di usare il timer.
Ricapitolando, se non ho capito male, devi controllare su un server remoto se è presente un file xml, in caso affermativo devi elaborarlo...
io userei un timer appunto per controllare tramite l'oggetto "HttpRequest" se nel server remoto esiste un file xml da elaborare;
in caso affermativo tramite l'oggetto "HttpResponse" o addirittura lo stesso "HttpRequest" (non ricordo bene) ti fai il download in locale del file xml da elaborare, successivamente in un bel thread separato fai fare al servizio il parsing del file appena scaricato salvandoti le informazioni che ti servono...
E' più difficile a dirsi che a farsi
Saluti!
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
sab 6 dic 2008 - 23:20
>Ciao Vincenzo,
>dunque :
>
>>mi devo studiare un po' gli Eventlog, poiche io avevo previsto cmq di importare quasiasi tipo di errore in un file xml,
>>che poi avrei dovuto leggere attraverso una web application.
>
>Gli errori di parsing dei file xml è meglio che te li salvi in
>una tabella del database, in modo che poi tramite una banale
>pagina aspx te li tiri su con una query e bona...
>
in realta avevo pensato di inserire una parte di errori nel db mentre un altra nel file xml.
poiche il db risiede su una macchina diversa, ad esempio un errore di connessione persa lo metto nel
file xml.
>>poiche devo collegarmi ad un db SQL srv 2000 usero' una connessione sql connection, questo dovrebbe >esonerarmi dal problema giusto?
>Giusto, se l'istanza di sqlserver risiede nella stessa macchina
>dove girerà il servizio non hai di che preoccuparti. (almeno
>in teoria :D)
>
non risiede nella stessa macchina,ma cmq sono nello stesso dominio, credo che cmq basti usare
un user valido per il db, allo stesso modo come faccio per web application!!?!?
>>ho visto nell' esempio ad un certo punto suggerisci di usare un timer, poiche devo ciclare 24h su 24 delle cartelle potrei usare anche un ciclo for infinito?
>
>beh diciamo che un ciclo for o while infinito bloccano l'elaborazione
>degli altri eventi che potrebbero scatenarsi durante l'esecuzione
>del servizio e potrebbero portare all'instabilità del servizio
>stesso, quindi ti consiglierei di usare il timer.
>
>Ricapitolando, se non ho capito male, devi controllare su un
>server remoto se è presente un file xml, in caso affermativo
>devi elaborarlo...
>io userei un timer appunto per controllare tramite l'oggetto
>"HttpRequest" se nel server remoto esiste un file xml da elaborare;
>in caso affermativo tramite l'oggetto "HttpResponse" o addirittura
>lo stesso "HttpRequest" (non ricordo bene) ti fai il download
>in locale del file xml da elaborare, successivamente in un bel
>thread separato fai fare al servizio il parsing del file appena
>scaricato salvandoti le informazioni che ti servono...
>
si allora ci saranno 4 cartelle che saranno riempite da un altra applicazione (che inserirà qualche migliaio di files xml al giorno), esse risiedono sulla stessa macchina dove girerà il servizio, le dovrò ciclare H24, aprire i file uno per volta elaborarlo ed inserire i dati in un db, inoltre il servizio se incontra una qualsiasi eccezione nell'elaborare un file non si deve mai fermare, magari mettere il file in un area di attesa e registra nel db l'errore, nel momento che viene risolto ripesca i files.
saluti
>E' più difficile a dirsi che a farsi
>
>Saluti!
>
Tutti sanno che una cosa è impossibile da realizzare, finché
>arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)
>
--------------------
Vincenzo PESANTE
Software Engineer
Torna su
Stanze Forum
Elenco Threads
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 !