我是Hangfire的新手,我正在努力了解它是如何工作的.
所以我在同一个解决方案中有一个MVC 5应用程序和一个Console应用程序.控制台应用程序是一个简单的应用程序,只更新数据库上的一些数据(最初计划使用Windows任务计划程序).
我在哪里安装Hangfire?在Web应用程序或控制台中?或者我应该将控制台转换为Web应用程序中的类?
如果我理解正确,解决方案中的控制台就像一个"伪"HangFire,因为就像你说的那样,它会超时完成一些数据库操作,你计划使用任务调度程序执行它.
HangFire概述
HangFire的设计可以完全按照您的控制台应用程序执行,但功能和功能更多,因此您可以避免自行创建所有内容的所有开销.
HangFire Instalation
HangFire通常与ASP.NET应用程序一起安装,但如果您仔细阅读文档,您会惊奇地发现:
Hangfire项目包含NuGet Gallery站点上的几个NuGet包.以下是您应该了解的基本软件包列表:
Hangfire - 仅针对使用SQL Server作为作业存储的ASP.NET应用程序安装的bootstrapper程序包.它只是引用了Hangfire.Core,Hangfire.SqlServer和Microsoft.Owin.Host.SystemWeb包.
Hangfire.Core - 包含Hangfire所有核心组件的基本软件包.它可以在任何项目类型中使用,包括ASP.NET应用程序,Windows服务,控制台,任何兼容OWIN的Web应用程序,Azure辅助角色等.
如您所见,HangFire可用于任何类型的项目,包括控制台应用程序,但您需要根据将使用的作业存储类型来管理和添加所有库.在这里查看更多:
安装HangFire后,您可以将其配置为使用仪表板,该界面可以在其中找到有关后台作业的所有信息.在我工作的公司中,我们多次使用HangFire进行重复性工作,主要是为了导入用户,在应用程序之间同步信息以及执行在工作时间运行成本高昂的操作,并且当我们想知道是否有用时,Dashboard非常有用.某项工作是否正在运行.它还使用CRON来安排操作.
我们现在使用的样本是:
Startup.cs
public partial class Startup { public void Configuration(IAppBuilder app) { //Get the connection string of the HangFire database GlobalConfiguration.Configuration.UseSqlServerStorage(connection); //Start HangFire Server and enable the Dashboard app.UseHangfireDashboard(); app.UseHangfireServer(); //Start HangFire Recurring Jobs HangfireServices.Instance.StartSendDetails(); HangfireServices.Instance.StartDeleteDetails(); } }
HangfireServices.cs
public class HangfireServices { //.. dependency injection and other definitions //ID of the Recurring JOBS public static string SEND_SERVICE = "Send"; public static string DELETE_SERVICE = "Delete"; public void StartSend() { RecurringJob.AddOrUpdate(SEND_SERVICE, () => Business.Send(), //this is my class that does the actual process HangFireConfiguration.Instance.SendCron.Record); //this is a simple class that reads an configuration CRON file } public void StartDeleteDetails() { RecurringJob.AddOrUpdate(DELETE_SERVICE, () => Business.SendDelete(), //this is my class that does the actual process HangFireConfiguration.Instance.DeleteCron.Record); //this is a simple class that reads an configuration CRON file } }
HangFireConfiguration.cs
public sealed class HangFireConfiguration : ConfigurationSection { private static HangFireConfiguration _instance; public static HangFireConfiguration Instance { get { return _instance ?? (_instance = (HangFireConfiguration)WebConfigurationManager.GetSection("hangfire")); } } [ConfigurationProperty("send_cron", IsRequired = true)] public CronElements SendCron { get { return (CronElements)base["send_cron"]; } set { base["send_cron"] = value; } } [ConfigurationProperty("delete_cron", IsRequired = true)] public CronElements DeleteCron { get { return (CronElements)base["delete_cron"]; } set { base["delete_cron"] = value; } } }
hangfire.config
上面的CRON表达式每天每小时运行0,15,30,45分钟.
Web.config文件
结论
鉴于您描述的场景,我可能会在您的ASP.NET MVC应用程序中安装HangFire并删除控制台应用程序,这很简单,因为它是一个不用担心的项目.即使你可以将它安装在一个控制台应用程序上,我也不愿意遵循这条路径,因为如果你碰到一堵砖墙(并且你会打击,相信我),你很可能会找到帮助,主要是因为它安装在ASP.NET应用程序.