我是C#和面向对象编程的新手。我正在创建一个windows服务,每隔10分钟就会ping一次IP地址10次。C# - Windows服务 - 连续Ping请求超时
如果10个请求中有7个超时(Isolate Network Blips),它会发送一封电子邮件通知系统关闭。我有这部分权利。
我面临的问题是通知说系统已启动。
以下是我的代码:
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;
}
}
我所试图实现的是,在Ping超时7 =>时间(s),并发送电子邮件通知,说明它已关闭。如果系统在接下来的两次执行过程中启动,请发送一封电子邮件,说明系统已启动(我的代码每两次执行一次会发送一封电子邮件,说明系统已启动)。
这是如何实现的?
更新1:我有电子邮件逻辑。
更新2:Vibhav Ramcharan的解决方案触发系统在每次执行startMethod()时发出通知。
系统关闭通知的阈值为70%,这是单次执行期间连续7次ping故障。
假设系统停机。触发一封电子邮件,通知系统故障。
当系统启动时,执行成功执行两次。发送电子邮件通知系统已启动。
上面的代码会触发每个methodStart()上的系统电子邮件。最终,垃圾邮件。
不,我有电子邮件逻辑工作。我所追求的是在系统关闭后执行两次方法的逻辑。 – Tango