代码之家  ›  专栏  ›  技术社区  ›  Chris

如何在Windows.NET服务中进行错误处理

  •  3
  • Chris  · 技术社区  · 14 年前

    这感觉像是一个问题,可能已经问过,但我找不到它,所以我问(可能再次)。

    我的第一个想法是寻找某种类似于我在ASP.NET项目中找到的全局错误处理程序,但是看不到任何类似的东西。

    另一个想法是,我可以得到所有顶级函数调用,并在它们周围放置try/catch。在我看来,这意味着在我的所有事件处理程序代码和服务启动和停止方法周围放置try/catch。这感觉不是一个好的方法,所以我想我可能是用错误的方法来处理这个问题。有人能建议我在错误处理方面应该做些什么吗?

    我假设在一个服务中,我不希望它仅仅抛出错误,因为它可能会停止服务,或者我实际上应该让服务崩溃并通过我前面提到的恢复机制自动重新启动它?

    我很不确定,所以请和我分享你的智慧……:)

    3 回复  |  直到 14 年前
        1
  •  6
  •   David Espart    14 年前

    在服务的main方法中放置try/catch并记录错误以便修复它们是没有问题的。如果捕获到的错误是意外的,则可以完全关闭服务。

    此外,除了主try/catch之外,您还必须为无法避免发生的每个潜在异常(即网络问题)添加try/catch,以便可以相应地执行操作,以恢复应用程序的正确行为,避免服务崩溃。

        2
  •  0
  •   Walter    14 年前

    多年来,我们已经在许多Windows服务中成功地使用了它。

    我们总是在一个动态链接库的功能。在服务中,当我们实例化并运行dll中的函数时,我们将调用包装为try/catch。然后服务可以记录或响应抛出的任何不可预见的异常。

        3
  •  0
  •   Lars Corneliussen    14 年前

    服务不应该失败。通常服务中的事情是由事件(网络调用或计时器)触发的。。。为每个事件运行的代码应该在try-catch中,这样服务就不会停止。

    我建议登录到事件日志以查找错误和其他重要信息。你可以用 log4net +那个 EventLogAppender 感谢你这么做。