0

我只使用 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 服务,对吗?如果是这样,我在哪里可以开始

4

1 回答 1

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";
    }
}
于 2013-03-12T01:29:50.010 回答