using System.Web.Hosting; using Hangfire; using Microsoft.Owin; using LeafWeb.Web; using Owin; [assembly: OwinStartup(typeof(Startup))] namespace LeafWeb.Web { public class Startup { public void Configuration(IAppBuilder app) { //GlobalConfiguration.Configuration // .UseSqlServerStorage("LeafWebContext"); app.UseHangfireDashboard(); app.UseHangfireServer(); 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("LeafWebContext"); // 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(); } } }