2013-03-11 3 views
0

Я занимаюсь только веб-разработкой с использованием MVC4, поэтому я действительно не работал с службами Windows. Я пытаюсь создать службу, которая будет запрашивать мою базу данных каждые 5 секунд и проверять конкретные результаты. Если результаты появятся, запустите мой собственный код. Первоначально я пытался сделать это в моем файле Global.asax с помощью класса Timer, который я нашел, что это плохая практика:Создание службы Windows, которая запускает бесконечный цикл

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

мне сказали, что служба Windows, будет лучше всего для этой задачи. Есть ли у вас учебники или фрагменты кода?

UPDATE:

К сожалению, я понимаю, что был расплывчатым.

Я просто ищу наилучший способ проверить свою базу данных, чтобы увидеть, удалось ли какое-либо из моих записей «завершить время» (представьте себе создание аукциона и установление времени окончания для него, поэтому, когда аукцион заканчивается, я могу отправьте электронное сообщение, уведомляя пользователя). Я пробовал это с помощью таймера в моем global.asax, но я знаю, что с этим связано множество проблем, поэтому я предложил другому пользователю создать службу Windows, это правильно? если да, то где я могу смотреть, чтобы начать работу на эту

+2

Может быть более эффективным использовать триггер базы данных, чем ударить вашу БД каждые 5 секунд. –

+0

Существует несколько небольших рамок для служб Windows, которые обрабатывают обычные вещи. Я разместил его здесь: http://blog.softwx.net/2012/07/simple-framework-for-windows-services.html – hatchet

+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"; 
    } 
} 
Смежные вопросы