2009-12-21 10 views
5

Ho visto alcune app che funzionano come un servizio di Windows ma possono ancora fornire una GUI che consente all'utente di vedere cosa sta realmente accadendo.GUI di Windows Service Plus/C#

Ad esempio, abbiamo un servizio Windows che crea report. Ci sono un certo numero di statistiche che gli amministratori vorrebbero vedere, come quanti report sono messi in coda, quanto RAM è in uso, tempo di costruzione, ecc.

Quello che vorremmo fare è fornire un modo perché l'amministratore possa vederlo - come un'app che può connettersi al servizio finestra per raccogliere e visualizzare queste informazioni ... o forse un modo in cui l'app stessa può fornire la propria GUI e visualizzarla quando richiesto. In questo momento, l'unica cosa che fa l'app crea un file di registro.

C'è un modo per farlo?

risposta

8

Diversi.

  1. Avere una sorta di componente che si aggancia al servizio di Windows e invia informazioni a un'altra applicazione tramite servizio remoto. Se si dispone di un contenitore IoC, è possibile farlo con un decoratore intelligente
  2. Utilizzare un bus di servizio, MSMQ, WCF, Growl o qualcosa di simile per trasmettere informazioni interessanti. Le domande devono semplicemente sapere come collegare in.
  3. esporre un endpoint HTTP o qualcosa in cui qualcuno può collegarsi e scaricare le informazioni sul servizio di Windows
  4. O semplicemente creare una sola pagina WinForms app che legge il file di log ogni modo spesso e mostra risultati interessanti.

(Si noti che quest'ultimo è di gran lunga il più semplice -. Suggerimento suggerimento, farlo)

+0

Grazie - Ho impostato il servizio remoto. Finì per essere molto più semplice dell'opzione # 4 sarebbe stata ... l'analisi dei file di testo fa schifo :) – bugfixr

0

Idealmente i servizi sono completamente separati dall'interfaccia utente per molte ragioni per cui non entrerò.

Tuttavia è possibile utilizzare alcune modalità di IPC per visualizzare informazioni come questa. La mia raccomandazione sarebbe quella di utilizzare i servizi remoti per richiedere i dati necessari al servizio e quindi creare qualsiasi report o grafico, se necessario, in un'applicazione separata.

+0

Suggerirei WCF anziché Remoting. Da un punto di vista progettuale, Remoting è strettamente accoppiato e può causare problemi di versioning (inoltre è molto più semplice limitare l'accesso ai servizi WCF rispetto agli endpoint remoti); Da un punto di vista tecnologico, Remoting è una tecnologia moribonda, sostituita da WCF. – itowlson

0

servizi non sono autorizzati a effettuare le chiamate API di interfaccia utente (ad eccezione di una specifica forma di finestra di messaggio). Quindi i servizi che sembrano avere un'interfaccia wser sono in realtà due processi. Il processo di servizio sta comunicando con una APP standard di Windows utilizzando una sorta di backchannel proprietario. Potrebbe essere una named pipe, un socket o un hunk di memoria condivisa denominata.

Problemi correlati