为关键任务实施监视程序

时间:2013-07-18 14:27:09

标签: c# .net watchdog

我有一个应用程序可以按计划时间发送电子邮件。 有时,在发送电子邮件时,应用程序会卡住,我仍然不确定原因。

我想过要实现这样一个简单的看门狗: 在应用程序开始发送电子邮件之前,它会初始化监视程序的新实例。 此实例启动一次计时器。 如果任务完成正常 - 我们让看门狗知道它应该停止,它取消了它的计时器。 如果计时器定义的时间段已经过去 - 我们会强行退出程序。

我不确定这是一个有效的解决方案还是更像是一个黑客,并且会感谢任何关于 这个主题。

谢谢,Omer

1 个答案:

答案 0 :(得分:1)

恕我直言,这不是一个坏主意。

我在这里看到的主要陷阱不是技术性的,而是一种人性化的错误:一旦看门狗正常运作并且做得恰到好处,客户不再抱怨,这是方式太容易说'#34;问题解决了!"并且忘记了最初的问题(最好把它扔到积压的地方,把它标记为"解决了#34;最坏的情况)。

技术方面:

你可能想要考虑看门狗和应用程序的隔离级别,以及看门狗行为的暴力程度。最小隔离是让看门狗在不同的线程上运行(一次性定时器会这样做)。让电子邮件机制和监视程序在不同的AppDomain上运行可能会更好,因此监视程序会卸载整个"电子邮件AppDomain"在超时。这为你提供了一个类似的解决方案来杀死这个过程(至少在一个"托管的#34;视点下),但是比杀死进程并再次启动它更不暴力。

您还应该考虑竞争条件:监管机构的计时器和电子邮件发送过程都在竞争,这可能会在电子邮件成功发送后终止,这可能会导致同一封电子邮件被删除重新启动应用程序时再次发送(导致糟糕的客户体验)。

正如评论员所说,我强烈建议您调试问题。您需要使用生产调试工具和工具,如跟踪,日志记录,生产时调试程序(如WinDbg)等,这些工具和工具允许您诊断和调试不可重现的问题。