0

Web ロールのバックグラウンドで実行されるメッセージング サービスの作成に取り組んでいます。Web ロールが起動すると、1 日に 1 回実行されてメールを送信する Quartz ジョブが開始されます。アイドル状態のためにスリープ状態にならないように Web ロールを設定しました。これにより、サイトでのアクティビティに関係なくジョブを実行できます。

私が抱えている問題は、最初に展開されたときに自分のサイトにアクセスしないと、ジョブが開始されないことです。Webrole が何らかの Azure マジックによって新しいインスタンスに移動された場合、メール サービスが実行されなくなるのではないかと心配しています。

ジョブは、Application_Start メソッドの Global.asax で開始されます。デプロイ時に Web ロールを自動的に開始するにはどうすればよいですか?

-編集-

もともと、WebRole.cs OnStart からジョブを開始しようとしていましたが、データベース接続に関するエンティティ フレームワークからエラーが発生していました。したがって、WebRole.cs OnStart から私の Web 構成の接続文字列にアクセスする方法を誰かが知っていれば、それも私の質問に答えます。

4

1 に答える 1

1

Put your code in your WebRole.cs:

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        Task.Factory.StartNew(StartQuartzJob);
        return base.OnStart();
    }

    private void StartQuartzJob()
    {
        // Do work here.            
    }
}

This code runs when your instance starts (after a deploy, after a reboot, ...). The advantage here is that it runs in a different process (WaIISHost.exe) that runs before your web application starts in IIS. So even if you don't have any requests going to that instance or if your application pool recycles, this process will keep running. Keep in mind that, since this is a different process, you won't have access to the web.config

于 2012-12-03T21:25:59.397 に答える