首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计划任务或服务的容错和可靠性的最佳实践

计划任务或服务的容错和可靠性的最佳实践
EN

Stack Overflow用户
提问于 2010-05-27 23:39:35
回答 2查看 2.5K关注 0票数 13

我一直在开发许多作为windows服务或计划任务运行的应用程序。

现在,我想确保这些应用程序将是容错和可靠的。例如,我有一个每小时运行一次的服务。如果服务在运行或运行时崩溃,我希望应用程序在同一时间段内再次运行(这涉及到一些事情,包括数据处理的事务),以避免数据丢失。此外,我希望程序报告错误的详细信息。我的目标是避免数据丢失,并且不会因为运行程序而落后。

我构建了一个类库,用户可以将其导入到项目中。库应该保存程序运行实例的信息,即。程序读取和写入运行间隔、运行状态等信息,这些数据存储在数据库中。

我很好奇,是否有一些最佳实践来使计划任务/ windows服务具有容错性和可靠性。

编辑:我说的是不同服务器上的独立任务或服务。我的目标是确保服务继续运行,报告任何故障并从中恢复。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-28 02:37:09

我对其他人说的话很感兴趣,但我会给你一些我偶然发现的观点:

  1. 为未处理的异常创建事件处理程序。通过这种方式,您可以清理资源、写入日志文件、给管理员发电子邮件,或者做任何您需要做的事情,而不是让它崩溃。

UnhandledExceptionEventHandler(AppUnhandledExceptionEventHandler);

  • Override AppDomain.CurrentDomain.UnhandledException +=新的servicebase事件处理程序,您可以在应用程序的主要部分中使用它。OnStart和OnStop非常重要,但您还可以使用许多其他的工具。定时器的http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase%28v=VS.71%29.aspx

  • Beware。Windows窗体计时器在服务中不能正常工作。用户System.Threading.Timers或System.Timers.Timer。在线程上进行更新时,请确保在关键字部分使用Best Timer for using in a Windows service

  • If ()或监视器,以确保所有内容都是锁定的,不要使用任何特定于用户的内容,因为服务是在没有特定用户上下文的情况下运行的。我注意到我的一些SQL连接字符串不再适用于windows授权等。我还听说人们在使用映射的drives.

  • Never使用UI创建服务时遇到了问题。事实上,对于Vista和Vista 7,它们使得它几乎不可能做到。它应该不需要用户交互,您最多只能使用WIN32函数发送一条消息。MSDN声称制作交互式服务是一种糟糕的做法。出于http://msdn.microsoft.com/en-us/library/ms683502%28VS.85%29.aspx

  • For调试的目的,让服务作为控制台应用程序运行,直到您让它做您想让它做的事情,这是很酷的。很棒的教程:http://mycomponent.blogspot.com/2009/04/create-debug-install-windows-service-in.html

无论如何,希望这会有一点帮助,但这只是我自己四处寻找的几件事。

票数 8
EN

Stack Overflow用户

发布于 2010-05-28 00:29:16

一件显而易见的事情--不要同时运行所有的任务。尝试安排它们,以便在任何时候(如果可能)只有一个任务在使用一些昂贵的资源。例如,如果您需要发送时事通讯和一些特定的通知,请将它们安排在不同的时间。如果两个任务需要清理数据库中的某些内容,请让这两个任务依次运行。

此外,还要安排任务在正常工作时间之外运行--显然是在晚上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2922559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档