首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF windows服务作为计划服务

WCF windows服务作为计划服务
EN

Stack Overflow用户
提问于 2009-04-25 22:30:48
回答 2查看 9.2K关注 0票数 2

我有一个运行在应用服务器上的.net WCF windows服务,它会持续监控文件夹中的xml文件。如何使此服务仅在每天的特定时间(01.00小时)运行?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-25 23:52:16

您的服务是一个真正的服务,还是仅仅是一个监控XML文件夹的WCF应用程序?

如果您的WCF服务只是一个普通的应用程序,最简单的方法是使用Windows中的计划任务功能(在控制面板中找到)。只需让应用程序在启动时检查文件夹,并设置一个计划任务,在您想要的任何时间启动应用程序。

如果目标应用程序是真正的Windows服务,则需要使用内部计时器。看一下System.Timers.Timer类。

代码语言:javascript
复制
public void OnLoad() {
    Timer timer = new Timer();

    // Add event handler
    timer.Elapsed += WorkMethod;

    // Give us more control over the timer.
    timer.AutoReset = false;

    SetupTimer(timer);
}

// Setups the timer for the next interval and starts it.
private void SetupTimer(Timer timer) {
    timer.Interval = GetNextChecktime().Subtract(DateTime.Now).TotalMillisecond;

    timer.Start();
}

private void WorkMethod(object sender, EventArgs e) {
    // Do work here

    // Setup the timer for the next cycle.
    SetupTimer((Timer)sender);
}

private DateTime GetNextChecktime() {
    // Return the next time the service should run as a datetime.
}

使用SetupTimer而不是使用自动重复的AutoReset = true的原因是为了使计时器与GetNextChecktime()同步。仅使用24*60*60*1000毫秒作为已用计时器将提供24小时阶段,但您需要在01:00启动脚本,才能让它在每天的01:00运行。

如果您仍然可以影响应用程序的运行方式,我实际上推荐第一种方法。除非您在服务中有更多的功能,或者需要维护一些持久状态,否则更简单的做法是让一个应用程序在启动时监视文件夹,然后退出。它也更容易调试,更不容易出错,因为调度是由Windows完成的。

票数 9
EN

Stack Overflow用户

发布于 2009-04-26 09:04:39

如果你每天只需要运行你的服务一次或两次(甚至一周只运行一次),我会创建一个控制台应用程序,并使用Windows的“计划任务”将其安排在选定的时间运行。这样,只有Windows系统本身会检查是否已经到了唤醒您的服务并进行处理的“正确”时间。

如果您有一个需要全天候运行的服务,例如,只在给定的时间窗口内处理消息,那么Windows (NT)服务可能是您的选择,它在后台运行,在服务器上运行,无需用户登录,并且可以做各种事情,如检查时间以查看是否需要工作,如果不需要,它可以继续休眠:-)

根据我的经验,服务的编程和调试有点棘手-如果你可以将你的逻辑打包到一个独立的控制台应用程序中,并将其作为计划任务运行,我更喜欢这个解决方案。它更简单,而且仍然能很好地完成这项工作。

Marc

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

https://stackoverflow.com/questions/789852

复制
相关文章

相似问题

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