C# 发生这种情况时如何通知一个人?

C# 发生这种情况时如何通知一个人?,c#,C#,我用C#编写了一个简单的通知程序命令行应用程序。基本上,我使用windows任务调度器,并将其设置为在特定时间运行此命令行应用程序 此时,命令行应用程序将运行,所有通知都将从数据库(使用linq to sql)中获取,并通过smtp格式化并发送给正确的人 现在,我应该如何处理这些场景 发生数据库错误 解决方案:向管理员发送一封电子邮件,通知他们失败并进行检查 发生smtp错误 解决方案: 所以这两件事可能会出问题。可能会有不同的组合 可能发生数据库错误,并且smtp也可能发生,或者可能只发生其中

我用C#编写了一个简单的通知程序命令行应用程序。基本上,我使用windows任务调度器,并将其设置为在特定时间运行此命令行应用程序

此时,命令行应用程序将运行,所有通知都将从数据库(使用linq to sql)中获取,并通过smtp格式化并发送给正确的人

现在,我应该如何处理这些场景

  • 发生数据库错误
  • 解决方案:向管理员发送一封电子邮件,通知他们失败并进行检查

  • 发生smtp错误
  • 解决方案:

    所以这两件事可能会出问题。可能会有不同的组合

    可能发生数据库错误,并且smtp也可能发生,或者可能只发生其中一种

    那么,如何将这些信息提供给管理员或其他人,以便他们能够修复它。我非常怀疑管理员是否会每天都去检查通知是否有效


    因此,基本上如何使其故障安全,或者至少使其在出现问题时管理员可以来修复它,然后手动运行通知程序并使所有内容恢复同步。

    因此,主要问题是,如果SMTP服务器出现故障,您不知道如何通知管理员。假设管理员的电子邮件帐户不在同一台服务器上,您有几个选项

    第一个选项:您可以在另一台服务器上设置cgi邮件脚本,并通过http与该服务器联系以发送电子邮件

    第二种选择:使用smtp客户端,并将其设置为与收件人的smtp服务器联系以直接发送电子邮件(而不是通过本地smtp服务器)


    顺便说一句:一些电子邮件提供商为来自特定地址的电子邮件提供文本消息通知。如果管理员不在办公桌上时服务器停机,这非常方便。

    您有两个选择

  • 将错误信息写入日志。让一些操作员经常检查日志成为一个程序

  • 叫其他服务吗

  • 然而,如果数据库不仅仅被你的应用程序使用,其他人完全可能会注意到。电子邮件服务器也是如此。如果它的下降,那么我打赌很多人会打电话。请注意,您的情况排除了丢失的网络连接(如死机交换机或配置错误的路由器)

    顺便说一句,如果它检测到SMTP正在备份,那么它应该通知某人它在给定的时间段内已关闭。数据库服务器也是如此

    最后,所有错误条件都应写入系统日志。写入windows事件日志非常简单。如果您的系统管理员遵循普遍接受的协议,他们无论如何都应该经常监控这些协议。

    您可以使用或将手机连接到服务器,并让它在出现严重错误时向管理员发送短信

    但你可以更进一步:

    • 如果失去网络连接怎么办 (开关或电缆坏了) 例如
    • 如果停电怎么办 (您最后一次测试 UPS)

    根据您的需要(以及不在短时间内发送这些通知的业务成本),您可能需要一个全面的监控解决方案。

    也可以选择将错误记录到,如果管理员定期检查事件日志,或者您有聚合这些错误的监控系统。

    对于您的数据库错误,您可以在(一组)电子邮件地址中硬编码数据库错误以发送到


    至于SMTP错误,您可以执行“SMTP恢复时发送电子邮件”,也可以使用其他方法通知管理员。这可能是一个备份SMTP服务器、一个SMS网关(如其他人所提到的),甚至是网络中的某个人桌面,如果它没有收到某种类型的“一切正常”,就会弹出警报从运行脚本的框中发出警告/消息。

    嗯,我不认为这些通知不会消失,这将是至关重要的……这将是一个更烦人的事情。有了SMS网关,这可能是我将来会考虑的事情(因为我的通知程序设置为处理SMS消息,作为另一种通知方式,而不仅仅是电子邮件)。现在,虽然设置短信网关太麻烦了。你会如何进行检测?在SMTP异常中,有一个线程睡眠15分钟,然后当它醒来时,它只调用程序/方法重新执行?@chobo2:如果它能够成功地发送另一封电子邮件,当它应该发送时,那么你就会知道它已备份,你应该能够广播所有排队的消息。这种桌面方式有什么用?您将如何检测smtp何时恢复?什么是cgi邮件脚本?一个问题是,我可能会在不同的公司建立它,这样他们可能会有不同的东西。所以他们可能有一个备份smtp,也可能没有。@chobo2:我的意思是一个非常简单的web脚本,当出现问题时,它会发送给你(或管理员)和电子邮件。如果服务器可以访问互联网,它可以托管在网络上的任何地方。我想我将对此进行研究。它看起来不错,但可能不会马上解决我的问题,因为我的web应用程序+通知程序将进入试点模式,所以我将暂时担任管理员。因此,我将忙于修复各地的bug,因此我不知道是否每天都要检查日志。