当前位置:  开发笔记 > 后端 > 正文

控制台/ Web App解决方案上的Hangfire作业?

如何解决《控制台/WebApp解决方案上的Hangfire作业?》经验,为你挑选了1个好方法。

我是Hangfire的新手,我正在努力了解它是如何工作的.

所以我在同一个解决方案中有一个MVC 5应用程序和一个Console应用程序.控制台应用程序是一个简单的应用程序,只更新数据库上的一些数据(最初计划使用Windows任务计划程序).

我在哪里安装Hangfire?在Web应用程序或控制台中?或者我应该将控制台转换为Web应用程序中的类?



1> jpgrassi..:

如果我理解正确,解决方案中的控制台就像一个"伪"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应用程序.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有