asp.net - C # - Windows Forms Application Monitor

Indlæg af Hanne Mølgaard Plasc

Problem



Dette er ikke rigtig et problem pr. Siger, men jeg har dette krav på arbejde, hvor jeg skal skrive et Windows-program i C #, der overvåger alle vores interne og eksterne systemer. Nogle af disse systemer er hjemmesider, og nogle er Windows-applikationer, som konstant poller data hele tiden til og fra databasen, herunder såpapi-opkald. Hvad min ansøgning skal gøre er at overvåge disse systemer og underrette relevante brugere, når nedetid opstår, og hvor længe har det været offline.


Jeg har lavet database design ved hjælp af SQL Server som en DBMS, men jeg er fast i implementering. Hvilken tilgang kan jeg bruge til at opnå dette? TCP/IP?
Denne applikation skal køre hvert x sekund.


Jeg har lavet et par flag i en enumme, der konstant vil kontrollere applikationstilstanden, hvis den er ok, i fejlagtig tilstand, eller om den skal advare brugeren. Udover dette har jeg også oprettet en konstruktør, der vil initialisere alle komponenterne i service monitoren via en DLL.


Noget sådan:


    [Flags]
    public enum ClientApplicationState
    {
        ERROR = 0,
        WARNING = 1,
        OK = 2
    }

/// <summary>
/// Constructor which sets up and initalizes all the components for the Service Monitoring DLL
/// </summary>
/// <param name="applicationName">The Name Of The Application</param>
/// <param name="port">The port on which to listen to</param>
/// <param name="timerPeriod"> Optional time in milisecinds to overide the default update freq (default is 1000)</param>
public ServiceMonitor(string applicationName, short port, int timerPeriod = 1000)
{
    \_messages = new List<string>();
    \_state = ClientApplicationState.OK;
    //TODO: Throw port exception
    try
    {
        \_monClient = new MonitoringClient(applicationName, ClientApplicationState.OK, "Starting Up",
            Process.GetCurrentProcess().ProcessName, port);
    }
    catch (Exception e)
    {

    }
    InitTimer(timerPeriod);
    \_updateTimer.Enabled = true;
}


Hjemmesiderne er vært og er live, og Windows-applikationerne kører på vores Windows 2012 R2-server.


Hvordan kan jeg nærme mig dette?

Bedste reference


Dine spørgsmål er alt for generelle til at svare. Men jeg tror, ​​du skal virkelig se på de 'ting', du har til hensigt at overvåge. Og så skal du forstå tjenester (hvis det er den tilgang, du vil tage - hvilket forekommer hensigtsmæssigt).


En tjeneste startes og kører kontinuerligt (logisk). Din ide om at køre 'hvert x sekund' er lidt vildledende. Du vil måske have din tjeneste til at 'tjekke' hvert x sekund, men ikke forveksle den idé med applikationens udførelse. Og selvfølgelig bør du kunne konfigurere den frekvens - en anden funktion, du bør planlægge.


For at være ærlig ser jeg ikke rigtigt på formålet med en database. Og på baggrund af det, jeg læser, foreslår jeg, at du stopper med at tænke på implementeringen og begynder at tænke på denne service som helhed. Hvor du gemmer data er irrelevant på dette point i tid. Du skal beslutte, hvad tjenesten gør (og 'overvåge for nedetid' er et meget for tidligt krav), for hvilke 'ting' det gør denne service, og hvordan den vil reagere. Hvad sker der, når din tjeneste stopper? overvåger du skærmen? Hvem vil installere/konfigurere den? Vil den give nogen oplysninger under kørsel? Og så videre.


Og før du går videre ser det ud til, at du skal skrive, hvad der er en ret kompleks service/system. Noget MS (og andre) har allerede gjort - ligesom MS Operations Manager https://technet.microsoft.com/library/hh230741.aspx. Hvis du vil genopfinde hjulet (i det mindste delvist), så kan det hjælpe dig med at se på dokumentationen for at se, hvad det gør, hvordan det er konfigureret, begreberne bag det osv. [2]