Invia messaggi da più servizi / applicazioni e li visualizza in un'unica posizione

1

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 .

  1. 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.

  2. 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.

    
posta Misiu 18.06.2016 - 21:38
fonte

1 risposta

1

Dal momento che si desidera essere in grado di avviare più istanze dell'applicazione di monitoraggio ed essere in grado di utilizzare la soluzione anche se nessuno è in "ascolto", alla fine tutti i dati devono essere distillati in una sorta di archivio dati centrale ( base dati, file flat, in memoria in alcune applicazioni centrali).

Personalmente, avrei bisogno di un servizio web per le tue esigenze di registrazione se le applicazioni che desideri approfondire NON sono tutte pronte ad accedere a un database centrale. Tutti gli aggiornamenti di stato e di registrazione andrebbero al punto finale del servizio Web che verrebbe quindi scritto in un archivio dati (SQL Server, Mongo, Raven ecc.). Avendo un servizio web che viene colpito puoi cambiare l'archivio dati senza dover cambiare nessuna delle tue altre applicazioni

L'applicazione di monitoraggio leggerà da questo archivio dati all'avvio per generare l'interfaccia utente.

Se tutte le applicazioni hanno accesso allo stesso database, il più semplice è anche il metodo più semplice (e con librerie come log4net diventa molto robusto) per centralizzare le informazioni.

    
risposta data 19.06.2016 - 00:15
fonte

Leggi altre domande sui tag