gpt4 book ai didi

c# - 在数据库中记录 Hangfire RecurringJob 的执行情况?

转载 作者:行者123 更新时间:2023-12-04 00:59:28 26 4
gpt4 key购买 nike

我已经设置了hangfire我的 ASP.NET 项目成功,即在我的数据库中创建了 11 个 Hangfire 表。我在 Application_Start() 中尝试了以下命令我项目的 Global.asax :

namespace myAPI
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start(
{
System.Diagnostics.Debug.WriteLine("Recurring job will be set up.");

RecurringJob.AddOrUpdate(
"some-id",
() => System.Diagnostics.Debug.WriteLine("Job instance started at " +
DateTime.Now)),
"*/2 * * * 1-5");
}
}
}

遗憾的是,在 Visual Studio 的窗口中 输出 > 调试 我只看到 Reccuring job will be set up.之后就什么都没有了。然而,一个 SELECT * FROM [myContext].[HangFire].[Set]给我看
Key              Score      Value     ExpireAt
recurring-jobs 1579116240 some-id NULL

到目前为止一切顺利,这意味着该工作确实已建立。

但是 每次执行 RecurringJob 时,我如何登录我的数据库? 我是否正确地假设 Hangfire 没有开箱即用,我必须自己在箭头函数中记录它?或者有更优雅的方式吗?

侧面提问: 为什么我看不到 System.Diagnostics.Debug.WriteLine 的任何输出在我的经常性工作中?

引用
  • Hangfire doesn't create tables in IIS
  • How to configure hangfire with ASP.NET to obtain connection string from config file?
  • Official hangfire.io docu on recurrent tasks
  • 最佳答案

    Hangfire 包含一个概念 job filters (类似于 ASP.NET MVC 的操作过滤器)。对于您的用例,您将定义一个将写入您的数据库(根据您的需要进行调整):

    using Hangfire.Common;
    using Hangfire.Server;

    class LogCompletionAttribute : JobFilterAttribute, IServerFilter
    {
    public void OnPerforming(PerformingContext filterContext)
    {
    // Code here if you care when the execution **has begun**
    }

    public void OnPerformed(PerformedContext context)
    {
    // Check that the job completed successfully
    if (!context.Canceled && context.Exception != null)
    {
    // Here you would write to your database.
    // Example with entity framework:
    using (var ctx = new YourDatabaseContext())
    {
    ctx.Something.Add(/**/);
    ctx.SaveChanges();
    }
    }
    }
    }

    然后将过滤器应用于作业方法:

    namespace myAPI
    {
    public class WebApiApplication : System.Web.HttpApplication
    {
    protected void Application_Start(
    {
    System.Diagnostics.Debug.WriteLine("Recurring job will be set up.");

    RecurringJob.AddOrUpdate("some-id", () => MyJob(), "*/2 * * * 1-5");
    }

    [LogCompletion]
    public static void MyJob()
    {
    System.Diagnostics.Debug.WriteLine("Job instance started at " + DateTime.Now)
    }
    }
    }

    文档: https://docs.hangfire.io/en/latest/extensibility/using-job-filters.html

    关于c# - 在数据库中记录 Hangfire RecurringJob 的执行情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59766671/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com