创建一个运行无限循环的Windows服务

时间:2013-03-11 23:46:07

标签: c# windows-services

我只使用MVC4进行Web开发,所以我没有真正使用过Windows服务。我正在尝试创建一个服务,每隔5秒查询一次我的数据库并检查特定结果。如果结果出现,则运行我的自定义代码。我最初尝试使用Timer类在我的Global.asax文件中执行此操作,我发现这是一个不好的做法:

var timer = new Timer(5000);
timer.Elapsed += new ElapsedEventHandler(Callback);
timer.Interval = 5000;
timer.Enabled = true;

有人告诉我,Windows服务最适合这个问题。那里有没有教程或代码片段?

更新:

抱歉,我发现这很模糊。

我只是寻找最好的方法来检查我的数据库,看看我的任何记录是否已达到他们的“结束时间”(想象一下创建一个拍卖并为其设置结束时间,所以当拍卖结束时我可以发送通知用户的电子邮件)。我在我的global.asax中使用Timer尝试了这个,但我知道有很多问题,所以我被其他用户建议创建一个Windows服务,这是正确的吗?如果是这样,我可以在哪里开始

1 个答案:

答案 0 :(得分:1)

我不确定你想要的复杂程度,但这是一个简单的模板,你可以玩,看看会发生什么:

using System;
using System.ServiceModel;
using System.ServiceProcess;


namespace MyService
{
   public class MyWindowsService:ServiceBase
   {
    public ServiceHost serviceHost = null;

    private static System.Timers.Timer scheduledTimer;

    public MyWindowsService()
    {
        ServiceName = "MyService";
        //Additional Initilizing code.
    }

    public static void Main()
    {
        ServiceBase.Run(new MyWindowsService());
    }

    protected override void OnStart(string[] args)
    {
        scheduledTimer = new System.Timers.Timer();
        scheduledTimer.AutoReset = true;
        scheduledTimer.Enabled = true;
        scheduledTimer.Interval = 5000;
        scheduledTimer.Elapsed += new System.Timers.ElapsedEventHandler(scheduledTimer_Elapsed);
        scheduledTimer.Start();
    }

    void scheduledTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        //DO CHECK.
    }

    protected override void OnStop()
    {
        if (scheduledTimer != null)
        {
            scheduledTimer.Stop();
            scheduledTimer.Elapsed -= scheduledTimer_Elapsed;
            scheduledTimer.Dispose();
            scheduledTimer = null;
        }
    }

    private void InitializeComponent()
    {
        this.ServiceName = "MyService";
    }
}