加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 设置Hangfire成功的作业到期属性不起作用

发布时间:2020-12-15 22:42:13 所属栏目:百科 来源:网络整理
导读:我正在使用Hangfire来做工作,我想改变一天后从数据库中删除成功的行为 – 我希望它们存储一年. 按照thread中的说明,与this SO question中的说明相同,我创建了一个类: public class OneYearExpirationTimeAttribute : JobFilterAttribute,IApplyStateFilter{
我正在使用Hangfire来做工作,我想改变一天后从数据库中删除成功的行为 – 我希望它们存储一年.

按照thread中的说明,与this SO question中的说明相同,我创建了一个类:

public class OneYearExpirationTimeAttribute : JobFilterAttribute,IApplyStateFilter
{
    public void OnStateUnapplied(ApplyStateContext context,IWriteOnlyTransaction transaction)
    {
        context.JobExpirationTimeout = TimeSpan.FromDays(365);
    }

    public void OnStateApplied(ApplyStateContext context,IWriteOnlyTransaction transaction)
    {
        context.JobExpirationTimeout = TimeSpan.FromDays(365);
    }
}

我在我的Asp.net web api启动类中注册它作为全局过滤器:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // ... other stuff here ...
        GlobalJobFilters.Filters.Add(new OneYearExpirationTimeAttribute());
        GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDBConnection");
        app.UseHangfireDashboard();
    }
}

web api是发布作业的地方(即,调用BackgroundJob.Enqueue(()=> …)).我没有更改执行实际作业的客户端的配置.

如果我现在发布一个作业并且成功,它仍然有一天的到期时间,你可以在屏幕截图中看到,它显示了仪表板和HangfireDb中的条目,

enter image description here

我做错了什么或我错过了什么?

解决方法

我在设置中的错误是该属性设置在错误的应用程序上.正如我在问题中所述,我在asp.net web api的startup.cs文件中添加了过滤器,其中发布了作业.

相反,我应该在正在执行作业的控制台应用程序中添加配置,即我的控制台应用程序以

static void Main(string[] args)
{
    GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDBConnection");
    GlobalJobFilters.Filters.Add(new OneYearExpirationTimeAttribute());
    // ... more stuff ...
}

然后它工作. Hangfire文档可以更清楚地说明应该配置过滤器的位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读