2013-03-11 98 views
0

我只使用MVC4进行web开发,所以我没有真正使用Windows服务。我正在尝试创建一个服务,每5秒钟查询我的数据库并检查具体结果。如果结果出来,然后运行我的自定义代码。我最初尝试使用Timer类,我发现这是一个不好的做法,在我的Global.asax文件这样做:创建运行无限循环的windows服务

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

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

更新:

对不起,我意识到这是模糊的。

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

+2

使用数据库触发器的效率可能比每5秒触击一次数据库效率更高。 – 2013-03-11 23:47:06

+0

有几个用于处理日常事务的Windows服务的小框架。我在这里发布了一个:http://blog.softwx.net/2012/07/simple-framework-for-windows-services.html – hatchet 2013-03-11 23:54:09

+1

当你搜索时发生了什么? – 2013-03-12 00:04:20

回答

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"; 
    } 
}