using System; using System.Web.Hosting; using Hangfire; using Microsoft.Owin; using MileageTraker.Web; using MileageTraker.Web.Email; using Owin; [assembly: OwinStartup(typeof (Startup))] namespace MileageTraker.Web { public class Startup { public void Configuration(IAppBuilder app) { app.UseHangfireDashboard(); SetupRecurringJobs(); } private void SetupRecurringJobs() { RecurringJob.AddOrUpdate( "serviceReminderJob", s => s.SendAllNotificationEmails(), Cron.Weekly(DayOfWeek.Monday, 6)); } } // http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html public class ApplicationPreload : IProcessHostPreloadClient { public void Preload(string[] parameters) { HangfireBootstrapper.Instance.Start(); } } public class HangfireBootstrapper : IRegisteredObject { public static readonly HangfireBootstrapper Instance = new HangfireBootstrapper(); private readonly object _lockObject = new object(); private bool _started; private BackgroundJobServer _backgroundJobServer; private HangfireBootstrapper() { } public void Start() { lock (_lockObject) { if (_started) return; _started = true; HostingEnvironment.RegisterObject(this); GlobalConfiguration.Configuration .UseSqlServerStorage("MileageTrakerContext"); // Specify other options here _backgroundJobServer = new BackgroundJobServer(); } } public void Stop() { lock (_lockObject) { if (_backgroundJobServer != null) { _backgroundJobServer.Dispose(); } HostingEnvironment.UnregisterObject(this); } } void IRegisteredObject.Stop(bool immediate) { Stop(); } } }