如何使进程在远程Windows服务器上运行

时间:2009-05-23 18:36:51

标签: c# asp.net multithreading process

我需要实现一个24/7远程Windows服务器上运行的后台进程。我的开发环境是C#/ ASP.NET 3.5。该过程的目的是:

  • 在适当的时间(例如工作安排前一天下午5:00)向员工和客户发送提醒电子邮件。
  • 当员工应该在工作岗位上时,查询并保存员工的GPS坐标,以便我以后可以验证他们的职位是否应该在原来的位置。

如果进程失败(它可能会失败,特别是在添加更新时),我需要立即(或在几分钟内)重新启动它,因为如果此过程无法发送,我会遇到非常严重的问题通知,记录GPS坐标或其要执行的任何其他任务。

6 个答案:

答案 0 :(得分:8)

  1. 将您的流程实施为Windows服务。 有关如何直截了当的例子 在这里编写Windows服务的代码 .Net请参阅http://www.developer.com/net/csharp/article.php/2173801

  2. 要控制会发生什么     服务失败通过配置     您服务上的“恢复”标签     在services.msc中。 (见下图)

  3. 对于高度关键的操作你     可能会考虑设置一个服务器集群来减轻单一     服务器故障(请参阅http://msdn.microsoft.com/en-us/library/ms952401.aspx)。

  4. alt text

答案 1 :(得分:5)

您需要Windows服务。您可以在Windows服务中进行非可视迭代操作。

答案 2 :(得分:2)

另一种方法是创建一个普通的应用程序并按计划运行它。您的应用程序每天运行一次以执行其操作,具体取决于您记录GPS坐标和发送报告的频率。如果您的服务不需要经常运行,这通常是推荐的方法,因为服务应该仅限于永远在线的应用程序。

答案 3 :(得分:1)

除了作为服务之外,您可能还希望在群集上运行,并使群集管理软件知道您的服务。

答案 4 :(得分:1)

您可以创建Windows服务(Windows上的服务器编程)或使用调度程序定期执行任务。

根据高可用性的要求,程序可以安装在故障转移群集上,其中将启动其他服务器(被动节点),如果第一个(活动节点)死亡,则静默等待作为热备份。这是一个广泛的话题。从维基百科上的High availablity开始。

答案 5 :(得分:1)

根据我的经验,如果您需要24x7全天候运行,您需要(一个或多个)监视程序进程来验证您的服务是否正常运行。仅依靠正常的服务框架无法保证程序正常运行 - 即使它看起来正在运行。看门狗程序(也是一种服务)可以自动查询服务,例如发布消息检查响应时间,查询统计信息等 - 当它检测到问题时,可以重新启动服务(或执行其他一些故障恢复)

拥有监视程序而不是仅依靠用户查询来检测错误的原因是它可以自动完成。这是首选方法,因为它允许主动检测。