LoginSignup
0
0

More than 1 year has passed since last update.

ASP.NET上で「WebBackgrounder」を使って、バックグラウンドタスクを実装しました。

Posted at

はじめに

ASP.NET上で「WebBackgrounder」を使って、バックグラウンドタスクを実装しました。

現在、ASP.NETでWebシステムを構築中で、利用者の登録時にバックグラウンド処理が必要になったので、何かないか探していたところ、「WebBackgrounder」というパッケージがあったので、使ってみました。

この「WebBackgrounder」というパッケージは、MicrosoftのWeb開発のベストプラクティス-ASP.NET では行わないことと、その代わりに行うことの記事で紹介されていたので、使えるかなあと

https://docs.microsoft.com/ja-jp/aspnet/aspnet/overview/web-development-best-practices/what-not-to-do-in-aspnet-and-what-to-do-instead

やりたいことは、以下の利用者登録処理で、本登録の有効時間(72時間)を設定し、バックグラウンドタスクで、有効時間が過ぎた仮登録の情報を削除する処理です。

利用者がWebシステムを使うため、利用者登録を行い、仮登録を行う。
 ↓
利用者に本登録用のメールを送る
 ↓
利用者がメールからのURLにアクセスして本登録を行う。

WebBackgrounderの入手

WebBackgrounderをnugetから入手。バージョン0.2.0が最新ですが、2012年から更新されていません。枯れた技術です。

https://www.nuget.org/packages/WebBackgrounder

参考ソース

まず初めに、Webアプリ開始と終了時に、WebBackgrounderの開始と終了処理を記述します。

Global.asax.cs(抜粋)
public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configure(WebBackgrounderSetup.Start);
    }

    protected void Application_End(object sender, EventArgs e)
    {
        GlobalConfiguration.Configure(WebBackgrounderSetup.Shutdown);
    }
}

次に、WebBackgrounderSetupでは、任意のジョブクラスを登録します。ジョブクラスでは、
任意の周期でタスクが実行できます。今回は1分周期でジョブが実行されます。

今回はジョブが1つだけですが、任意の周期でジョブが登録できます。

WebBackgrounderSetup.cs(抜粋)
public static class WebBackgrounderSetup
{
    private static readonly JobManager jobManager = CreateJobWorkersManager();

    public static void Start(HttpConfiguration config)
    {
        jobManager.Start();
    }
    public static void Shutdown(HttpConfiguration config)
    {
        jobManager.Dispose();
    }

    private static JobManager CreateJobWorkersManager()
    {
        var jobs = new IJob[]
        {
            new UserStatusUpdateJob("UserStatusUpdateJob", TimeSpan.FromMinutes(1)),
        };

        var coordinator = new SingleServerJobCoordinator();
        var manager = new JobManager(jobs, coordinator);
        return manager;
    }
}

最後に、ジョブクラスでは、WebBackgrounder.Jobクラスを継承したクラスを実装します。

WebBackgrounderSetup.cs(抜粋)
public class UserStatusUpdateJob : Job
{
    public UserStatusUpdateJob(string name, TimeSpan interval) : base(name, interval)
    {
    }

    public override System.Threading.Tasks.Task Execute()
    {
        return new Task(() =>
        {
            UpdateStats();
        });
    }

    public void UpdateStats()
    {
         // 有効時間が過ぎた仮登録の情報を削除処理

    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0