0

私は MVC4 を使用した Web 開発のみを行っているため、Windows サービスを実際に扱ったことはありません。データベースに 5 秒ごとにクエリを実行し、特定の結果を確認するサービスを作成しようとしています。結果が表示されたら、カスタム コードを実行します。私はもともと、Global.asax ファイルで Timer クラスを使用してこれを実行しようとしましたが、これは悪い習慣であることがわかりました。

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 に答える