2012-01-24 9 views
2

私はアプリケーションで2分ごとに実行したいバックグラウンドプロセス/機能を持っています。データベース内の現在の時刻のイベントをチェックし、イベントリストがあればそれを表示します。ASP.NETでバックグラウンドプロセスを定期的に呼び出す方法

  1. ASP.NETでBackgroundWorkerのプロセスを使用した:私は二つのアプローチ次を発見した。この目的のため

    。 (でも、2分ごとに呼び出す方法はわかりません)

  2. 私のWebServiceを呼び出すWindowsサービスを使用して解決策を試そうとしました。 (しかし、これで助けを見つけることができませんでした。)

私の問題の解決策を教えてください。

+0

イベントリストはどこに表示しますか? –

+0

実際には、イベントタイプをチェックし、それをデータベースの "Alerts"テーブルに追加します... このタスクは、アプリケーションで2分ごとに発生します。 –

+0

それはSergeysの質問に答えません。あなたが書いたように、あなたのバックグラウンドタスクのどこかに*リストを表示したいです。どこでどのように? – Jan

答えて

1

は、我々はまた、別のアプローチを使用することができます。..

1)ASP.Net Windowsサービスアプリケーションを作成します。 このWindowsサービスのASP.Netアプリケーションから呼び出す必要のあるWebServiceのURLを指定する必要があります(ほとんどの場合、WindowsサービスのApp.Configにあります)。

2)WindowsサービスでWebサービスの「Web参照」を追加します。このWindowsサービスメソッドが後に呼び出されたとき

3)は、今、特定の時間間隔(各2分と言う)

3の後に呼び出されるメソッドを持つことになり、そのWindowsサービスのメソッド)を作成しましたTimerが経過しました。ASP.NETアプリケーションでWebサービスメソッドを呼び出します。

4)Windowsサービスのセットアップを作成し、必要な場所にインストールします。

0

そのプロセス/機能で新しいスレッドを作成する必要があります。関数はこのようなものにする必要があります:

public void myfunctionloop() 
{ 
    while(true) 
    { 
    //do your stuff 
    wait 2 mins 
    } 
} 

そのように、あなたのアプリケーションは、メインスレッドでいつものように動作している間、あなたはすべての2分あなたの方法をやってスレッドを持つことになります。

は、このウェブに見てみましょう:

http://msdn.microsoft.com/en-us/magazine/cc164128.aspx http://www.codeproject.com/Articles/38501/Multi-Threading-in-ASP-NET

0

あなたはへのBackgroundWorkerクラスを使用することができますこれを行います。Application_Startにインスタンスを作成し、Application_Endイベントが発生したらそれを廃棄してください。詳細については

は、あなたが特定の時間間隔の後にバックグラウンドスレッドを呼び出すためにタイマーを使用することができ、この

http://www.codeproject.com/Articles/34968/Use-NET-s-BackgroundWorker-to-Keep-ASP-NET-Cache-i

-1

を見てみましょう。それがバックグラウンド・プロセスを呼び出すタイマーのすべてのtickinngに

protected void BackGroundJob() 
{ 
    //Your code goes here 
} 

protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    Thread t = new Thread(new ThreadStart(BackGroundJob)); 
    t.Start(); 
} 

スレッディングは、のようになります。それに応じてタイマーをカスタマイズします。

0

Quartz Schedulerは、より良い解決策です。それはあなたに多くのオプションを与えます。

0

このようにあなたは、Global.asaxの中で宣言したタイマーを使用することができます

void Application_Start(object sender, EventArgs e) 
    { 
     System.Timers.Timer timer = new System.Timers.Timer(); 
     timer.Interval = 2000 * 60; 
     timer.Elapsed += Myhandler; 
     timer.Start(); 

     Application.Add("timer", timer); 
    } 

    static void Myhandler(object sender, System.Timers.ElapsedEventArgs e) 
    { 
    } 
0

あなたのASP.NETアプリケーション内の一部のページまたはより良いASHXハンドラを呼び出す単純なWindowsサービスを行うことができます。 Windowsサービスを作成し、その中にashxハンドラを呼び出します。

public partial class Service1 : ServiceBase 
    { 
    private Timer serviceTimer = new Timer(); 

    public Service1() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     this.serviceTimer.Interval = (1000 * 60) * 2; // TWO minutes 
     this.serviceTimer.Elapsed += new ElapsedEventHandler(DoWork); 
     this.serviceTimer.Start(); 
    } 

    protected override void OnStop() 
    { 
     this.serviceTimer.Stop(); 
    } 

    void DoWork(object sender, ElapsedEventArgs e) 
    { 
     WebClient wc = new WebClient(); 
     wc.DownloadData("http://www.yoursite.com/checkevents.ashx"); 
    } 

    } 

それとも、キャッシュの有効期限をハックを使用することができ、あなたはここに完全な例とコードを見ることができます:このような何かここで http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

+0

返信いただきありがとうございますantonio、私はハンドラ(ashx)ファイルで私のシナリオをどのように動作させるかに慣れていません.... これで私を導くことができますか? ? –

+0

また、プレーンaspxページを使用することもできますが、ashxはこのケースにはるかに適しています。こちらをご覧ください:http://www.dotnetperls.com/ashx –