标签: hangfire

使用.net核心进行Hangfire依赖注入

如何在Hangfire中使用.net core的默认依赖注入?

我是Hangfire的新手,正在寻找一个与asp.net核心兼容的例子.

c# hangfire asp.net-core

52
推荐指数
4
解决办法
2万
查看次数

配置在Hangfire上每15分钟执行一次的cron作业

我正在使用Hangfire,非常喜欢这个软件!但我缺少的一件事是如何添加每隔几分钟执行一次的定期工作(例如每15分钟执行一次).有没有办法实现这个目标?

c# ncron hangfire

28
推荐指数
2
解决办法
2万
查看次数

禁用重新排队失败的Hangfire BackgroundJob

有没有办法禁用失败的Hangfire BackgroundJob的重新排队?

我们不希望再次执行失败的作业,因为这可能会导致问题.

c# hangfire

27
推荐指数
5
解决办法
6869
查看次数

如何在启动时删除所有hangfire重复工作?

我正在考虑使用Hangfire作为重复工作的作业调度程序.所以配置它们很简单AddOrUpdate,但是我该如何删除呢?我不希望RecurringJob.RemoveIfExists()在删除该作业时污染我的代码,然后必须记住以后删除它.

有没有办法获取所有定期作业的列表并在服务器启动时删除它们,因此我的代码每次都会重新添加它们?如果没有,如果有更好的方法?

例如

应用程序版本1:添加了新的Hangfire定期作业 Do something 1

应用程序版本2:添加了新的Hangfire定期作业Do something 2Do Something 3

应用程序版本3:删除了Hangfire定期作业 Do something 2

问题:作业仍将存在于服务器上,并显示"无法加载类型..."错误,需要删除.

c# recurring hangfire

23
推荐指数
2
解决办法
1万
查看次数

Hangfire在一分钟内重复执行任务

有没有办法每隔几秒设置一次篝火重复工作?我不寻求一个解决方案,即火灾和忘记任务会产生另一个火灾和忘记任务,如果没有,建议的替代方案是什么?

.net c# hangfire

21
推荐指数
4
解决办法
9983
查看次数

是否有适用于Hangfire的内存作业存储包?

我有一个控制台应用程序来测试HangFire.这是代码:

using System;
using Hangfire;

namespace MyScheduler.ConsoleApp
{
    internal static class Program
    {
        internal static void Main(string[] args)
        {
            MyMethod();

            Console.WriteLine("[Finished]");
            Console.ReadKey();
        }

        private static void MyMethod()
        {
            RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Minutely);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它在运行时抛出异常:

附加信息:JobStorage.Current属性值尚未初始化.您必须在使用Hangfire客户端或服务器API之前进行设置.

所以我需要一个工作存储来运行它.但是SQL存储中的所有示例等.有没有办法用某种内存存储来运行这个例子?

JobStorage.Current = new SqlServerStorage("ConnectionStringName", options);  
// to  
JobStorage.Current = new MemoryDbStorage(string.Empty, options);  
Run Code Online (Sandbox Code Playgroud)

c# hangfire

21
推荐指数
4
解决办法
1万
查看次数

Hangfire配置和Ninject配置

我有一个使用Ninject的MVC 5应用程序,我正在添加Hangfire.

当我添加Ninject时,NinjectWebCommon由于其配置简单,我使用了nuget包.所以现在Ninject通过NinjectWebCommon创建标准内核的类来配置并添加绑定.

此外,我创建了一些我在创建内核时加载的自定义模块

private static IKernel CreateKernel() {
    var kernel = new StandardKernel( new MyCustomModule() );
    try {
        kernel.Bind<Func<IKernel>>().ToMethod( ctx => () => new Bootstrapper().Kernel );
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices( kernel );
        return kernel;
    }
    catch {
        kernel.Dispose();
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ninject Web Common是通过WebActivatorEx课程注册的

[assembly: WebActivatorEx.PreApplicationStartMethod( typeof( MyProject.Web.NinjectWebCommon ), "Start" )]
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute( typeof( MyProject.Web.NinjectWebCommon ), "Stop" )]
Run Code Online (Sandbox Code Playgroud)

现在问题与如何让Hangfire看到Ninject配置有关.通过查看Hangfire.Ninject我能读到的包裹

该包为IGlobalConfiguration接口提供了一个扩展方法:

var kernel = new StandardKernel(); GlobalConfiguration.Configuration.UseNinjectActivator(kernel);

现在我的问题是:

  • 由于IGlobalConfiguration接口,我应该在OWIN启动方法中添加Hangfire Ninject配置(已经放置了Hangfire配置).我应该如何获得当前的Ninject内核(NinjectWebCommon配置的内核)?
  • 执行的顺序怎么样?是WebActivatorEx …

c# ninject asp.net-mvc-5 hangfire hangfire.ninject

20
推荐指数
1
解决办法
2292
查看次数

Hangfire依赖注入生命周期范围

我正在重写整个问题因为我意识到原因,但仍然需要一个解决方案:

我在Hangfire中有一个经常性的工作,每分钟运行并检查数据库,可能更新一些东西,然后退出.

我将dbcontext注入包含job方法的类中.我注册这个dbcontext以使用以下注入

builder.RegisterType<ApplicationDbContext>().As<ApplicationDbContext>().InstancePerLifetimeScope();
Run Code Online (Sandbox Code Playgroud)

但是,每次作业运行时,Hangfire似乎都不会创建单独的生命周期范围,因为构造函数只会被调用一次,尽管每分钟调用一次作业方法.

这给我带来了问题.如果用户更新了数据库中的某些值(dbcontext被注入其他地方并用于更新值),则仍在使用的上下文Hangfire开始返回已更改的过时值.

c# autofac hangfire

19
推荐指数
2
解决办法
1万
查看次数

Hangfire单例重复出现的工作

我正在尝试使用Hangfire在后台运行定期作业,轮询来自其他网站的数据,问题是如果上一个作业仍在运行,我不希望重复作业运行.

我已阅读文档,但似乎无法找到答案.有没有办法让一个每10分钟运行一次的重复工作,但如果之前的任务还没有完成则会跳过?

public void Configuration(IAppBuilder app)
{
    app.MapSignalR();

    // Hangfire
    GlobalConfiguration.Configuration
        .UseSqlServerStorage("DatabaseContext");

    app.UseHangfireDashboard();
    app.UseHangfireServer();

    RecurringJob.AddOrUpdate("site-parser", () => SiteParserService.RunAll(), Cron.Minutely, TimeZoneInfo.Utc);

    ConfigureAuth(app);
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc hangfire

16
推荐指数
1
解决办法
4230
查看次数

如何在Hangfire中调用异步方法?

我有asp.net核心API应用程序,这是我第一次使用HangFire.

在.Net Core应用程序中,我的所有方法都是异步的.基于SO Post,wait()在hangfire中调用异步方法时使用它并不是一个好主意.
另外,根据v1.6.0中的hangfire支持问题,添加了异步支持.我使用的是1.6.12版,但我仍然没有看到异步支持.

我如何调用异步方法Enqueue.目前我正在使用wait()

public class MyController : Controller
{
    private readonly Downloader _downlaoder;
    private readonly IBackgroundJobClient _backgroungJobClient;
    public MyController(Downloader downloader, IBackgroundJobClient backgroungJobClient)
    {
        _downlaoder = downloader;
        _backgroungJobClient = backgroungJobClient;
    }

    [HttpPost]
    public void Post([FromBody]IEnumerable<string> files)
    {
        _backgroungJobClient.Enqueue(() => _downloader.DownloadAsync(files).Wait());
    }
}
Run Code Online (Sandbox Code Playgroud)

c# hangfire .net-core asp.net-core

15
推荐指数
1
解决办法
9536
查看次数