我只使用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服务,这是正确的吗?如果是这样,我可以在哪里开始
答案 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";
}
}