Ich bin neu in C# und objektorientierte Programmierung im Allgemeinen. Ich erstelle einen Windows-Dienst, der eine IP-Adresse 10 Mal alle 10 Minuten pingt.C# - Windows Service - Kontinuierliche Ping Anfrage Timeouts
Wenn 7 von 10 Anfragen Timeout (Isolate Network Blips), würde es eine E-Mail senden, die benachrichtigt, dass das System nicht verfügbar ist. Ich habe diesen Teil richtig gemacht.
Das Problem, mit dem ich konfrontiert bin, ist mit der Meldung, dass das System läuft.
Das folgende ist mein Code:
protected override void OnStart(string[] args)
{
eventLog.WriteEntry("Source: Service Started",EventLogEntryType.SuccessAudit);
timer.Enabled = true;
timer.Interval = (10 * 60 * 1000);
timer.Elapsed += new System.Timers.ElapsedEventHandler(methodStart);
}
public void methodStart(object sender, ElapsedEventArgs e)
{
Ping p = new Ping();
PingReply r;
string s = "SYSTEM-IP-ADDRESS";
int upCounter=0;
int downCounter = 0;
bool sysDown = false;
try
{
for (int i = 0; i < 10; i++)
{
r = p.Send(s);
if (r.Status == IPStatus.Success)
{
eventLog.WriteEntry("Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful"
+ " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n", EventLogEntryType.SuccessAudit);
upCounter++;
}
else
{
downCounter++;
}
}
if(downCounter>=7)
{
//LOG ENTRY
eventLog.WriteEntry("Unable to reach the system after 7 Timeouts! Email notification Sent.", EventLogEntryType.FailureAudit);
// EMAIL NOTIFICATION
downCounter = 0;
}
else
{
sysDown = false;
}
}
catch (Exception ex)
{
//EXCEPTION HANDLING
}
loopCounter++;
if(sysDown==false && loopCounter>2)
{
eventLog.WriteEntry("The Tool Is Up Email Notification Sent", EventLogEntryType.SuccessAudit);
// EMAIL NOTIFICATION
loopCounter = 0;
}
}
Was ich versuche zu erreichen, die Ping-Zeiten out 7 => Zeit (en) und sendet eine E-Mail unter Angabe es ist nach unten. Wenn das System während der nächsten 2 Ausführungen aktiv ist, senden Sie eine E-Mail, die besagt, dass das System betriebsbereit ist (Mein Code sendet alle 2 Ausführungen eine E-Mail, die angibt, dass das System betriebsbereit ist).
Wie kann dies erreicht werden?
Update 1: Ich habe die E-Mail-Logik.
Update 2: Die Lösung von Vibhav Ramcharan löst eine Systemup-Benachrichtigung bei jeder Ausführung von startMethod() aus.
Der Schwellenwert für die System-Down-Benachrichtigung beträgt 70%. Dies sind 7 Ping-Fehler während einer einzigen Ausführung.
Angenommen, wenn das System ausfällt. Eine E-Mail wird ausgelöst, die einen Systemfehler meldet.
Wenn das System betriebsbereit ist, wird die Ausführung zweimal erfolgreich ausgeführt. Senden Sie eine E-Mail, die benachrichtigt, dass das System betriebsbereit ist.
Der obige Code löst eine System-E-Mail auf jedem methodStart(). Schließlich, Spamming.
Nein, ich habe die E-Mail-Logik, die funktioniert.Was ich möchte, ist die Logik, die Methode zweimal auszuführen, nachdem das System ausfällt. – Tango