All'interno del sistema che sto sviluppando ho diversi servizi Windows, un paio di applicazioni in esecuzione in Scheduler e un'applicazione COM + che sta eseguendo le mie DLL personalizzate.
Alcune di loro sono in esecuzione sullo stesso PC, ma la maggior parte su macchine diverse ma nella stessa rete locale.
Mi piacerebbe monitorare lo stato delle attività svolte da ciascun elemento. Ad esempio, uno dei servizi di Windows controlla se ci sono file nella cartella specifica, in tal caso inizia a elaborarli.
Devo sapere quando ogni elemento inizia e si arresta e ha informazioni sullo stato (ad esempio "elaborazione dei file 2/300").
Voglio avere un posto (applicazione singola) che visualizzerà la lista di servizi / applicazioni / COM + DLL e il loro stato. Non ho bisogno di controllare quegli elementi (riavviarli, avviarli, fermarli) Voglio vedere il loro stato.
Ho cercato su Internet e ho trovato diverse opzioni, ma prima di iniziare a implementarne una, devo sceglierne una che sia più adatta al mio caso.
Di seguito sono elencate le opzioni che amo:
1. memorizza tutto nel database, ad esempio nella tabella:
Name | Status | Date | Error message
---------------------------------------------------------------
Print server | Working| 2016-06-18 21:20:11|
Backup service | Failed | 2016-06-18 20:17:49| Not enough space
e utilizzando per esempio link visualizza tutto nella mia app come griglia, in questo modo quando qualcosa cambia in sql table la mia app si aggiornerà automaticamente .
-
Scrivi tutto nel registro eventi e poi leggi tutti i registri nella mia app C #. In questo modo devo configurare ogni nuovo elemento nella mia app, perché la mia app dovrebbe conoscere la posizione del registro eventi per ogni servizio / applicazione.
-
Usa il messaggio NamedPipes / Sockets / UDP per trasmettere messaggi da ogni applicazione / servizio che voglio monitorare. Non sono sicuro che funzionerà se avessi 2 applicazioni che inviano messaggi sulla stessa porta dallo stesso pc. Non riesco a fare l'approccio standard dei client server, perché non avrò la mia applicazione di monitoraggio sempre in esecuzione, quindi i client (servizi / applicazioni) non saranno in grado di connettersi ad essa, oltre a poter avere più applicazioni di monitoraggio esecuzione.
Fondamentalmente ho bisogno di un modo per inviare (trasmettere) messaggi da più posti (applicazione standard / servizio Windows / DLL personalizzata) senza sapere se qualcuno li sta ascoltando. Inoltre mi piacerebbe essere in grado di avviare più applicazioni e avere messaggi visualizzati in tutti loro.
La prima soluzione è la più semplice da me creare, ma la soluzione più semplice non è sempre la migliore.