天道酬勤,学无止境

hangfire

Object getting Null seems like deserialization issue in Hangfire

It seems like Hangfire is unable to deserialize my original Scheduler object with all its state, whose Execute method I am calling in BackgroundJob.Enqueue() as shown below: Scheduler = new FileInFileOut { FileIn = new FileInput() { FileName = "SampleInput.txt", DirectoryPath = @"C:\Users\LENOVO\Desktop\iRule", FileFormat = new System.Collections.Generic.Dictionary<string, string> { {"X", "ParseInt(input.Substring(0, 2))"}, {"Y", "ParseInt(input.Substring(3, 2))"}, {"Z", "ParseInt(input.Substring(6, 2))"}, } }, FileOut = new FileOutput() { FileName = "SampleOutput.txt", DirectoryPath = @"C

2021-06-23 23:15:02    分类:问答    c#   hangfire

Hangfire 无法加载程序集(Hangfire failes to load assembly)

问题 语境 我有两个应用程序,一个是我的主要企业应用程序,另一个是我托管的 hangfire(hangfire 服务器、客户端和仪表板)。 我的主应用程序也使用 hangfire 来处理一些长任务并异步执行它们。 两者都使用相同的 DB 进行 HF 存储。 而且只有一台 HF 服务器。 问题 我间歇性地收到以下错误 - “无法将状态更改为‘正在处理’:未找到目标方法。” 或者 “无法将状态更改为‘入队’:未找到目标方法。” 详细信息如下—— System.IO.FileNotFoundException 无法加载文件或程序集“MyApp.Hangfire,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。 该系统找不到指定的文件。 其中MyApp.Hangfire是我执行作业的hangfire应用程序。 我确信它就在那里,甚至一些成功的工作也证实了这一点。 请查找随附的屏幕截图以了解更多详细信息。 观察 问题不一致,作业并不总是失败,有时它会失败,重新排队并通过,有时当它没有重试时甚至会失败。 如屏幕截图所示 回答1 几天前我偶然发现了同样的问题,并认为值得在这里添加它。 解决方案:在仪表板 Web 应用程序中添加了对“MyApp.Hangfire”的引用。 上下文与您的非常相似或相同: -Hangfire

2021-06-23 14:47:04    分类:技术分享    c#   hangfire

每 8 天在 Hangfire 中执行一次循环作业(Execute a recurring job in Hangfire every 8 days)

问题 是否可以在 Hangfire 中创建一个在给定天数后执行的重复性作业,比如 8。 我发现最接近的是每周执行一次工作 - RecurringJob.AddOrUpdate("MyJob",() => ScheduledJob(), Cron.Weekly()); 了解到 Hangfire 也接受标准的CronExpression ,我尝试探索这个频率的 cron 表达式,但找不到一个 - https://en.wikipedia.org/wiki/Cron 一种丑陋的解决方案可能是创建 3 或 4 个作业,在相应的某个日期每月执行一次,但我不想这样做。 请提出任何建议。 回答1 最后,我像这样使用CronExpression来安排重复性工作,频率为每 8 天或任意天数。 string cronExp = "* * */8 * *"; RecurringJob.AddOrUpdate("MyJob",() => ScheduledJob(), cronExp); CronExpression中的CronExpression表示一个月中的CronExpression一天。 各个部分如下 - (参考:https://en.wikipedia.org/wiki/Cron) 回答2 更清洁的解决方案是使用Cron.DayInterval(interval) 。 对于您的情况,它将是

2021-06-23 14:22:17    分类:技术分享    c#   cron   hangfire

在 Hangfire 中保存超过 1 天的作业历史记录(Keep history of jobs executed for more than 1 day in Hangfire)

问题 我刚开始使用 Hangfire,我很喜欢它。 据我了解,Hangfire 会将成功作业的历史记录保留 1 天,并在此后清除。 有没有一种方法可以自定义此默认行为并将历史记录保留任何持续时间,例如 7 天? 回答1 为此,您需要创建一个作业过滤器并通过 hangfire 全局配置进行注册,如下所述 - https://discuss.hangfire.io/t/how-to-configure-the-retention-time-of-job /34 创建作业过滤器 - using Hangfire.Common; using Hangfire.States; using Hangfire.Storage; using System; namespace HangfireDemo { public class ProlongExpirationTimeAttribute : JobFilterAttribute, IApplyStateFilter { public void OnStateApplied(ApplyStateContext filterContext, IWriteOnlyTransaction transaction) { filterContext.JobExpirationTimeout = TimeSpan.FromDays(7); } public

2021-06-23 08:36:39    分类:技术分享    hangfire

部署后如何让IIS站点自动启动?(How to get IIS site to start up automatically after deployment?)

问题 我有一个 Web API 服务,我将它部署到我的各种环境中(使用 Octopus Deploy)。 它应该在启动时执行各种任务,例如运行 Entity Framework Code First 所需的任何迁移脚本,以及由 Hangfire 管理的一些后台任务。 问题是,该网站仅在有人第一次致电时才会唤醒。 我希望它在部署后立即运行。 我可以通过将 Web 浏览器指向 API 的主页来手动完成,但这需要我记住这样做,如果我要部署到多个触手,这是一个主要的 PITA。 如何强制网站在部署后立即自动启动? 回答1 在打开或关闭 Windows 功能下的控制面板中,在“Web 服务器 (IIS) | Web 服务器 | 应用程序开发”下,选择“应用程序初始化”。 在 IIS 中,在应用程序池的高级设置中,“启动模式”应设置为“始终运行”。 在 IIS 中,在站点的高级设置中,“启用预加载”应设置为“true”。 新部署将使其重新启动(可能在短暂延迟后)。 回答2 您可以为此使用应用程序初始化模块,正如许多答案所提到的那样,但是在部署中加入 PowerShell 步骤有几个好处...... 它可以预热您的网站它可以像一个非常基本的烟雾测试如果失败,则部署在 Octopus 中标记为失败 我使用这个 PowerShell 脚本在部署后预热和检查网站。 Write-Output

2021-06-23 05:25:53    分类:技术分享    iis-7.5   octopus-deploy   hangfire

Hangfire does not process recurring jobs unless dashboard is open

When I log into the server and open dashboard, it shows recurring jobs with the next execution in the past. Within seconds it triggers processes them automatically, but if I don't log in and open the dashboard, the recurring jobs are not triggered. It appears that Hangfire is running as expected and processing jobs. Why will it not trigger without me looking at it?

2021-06-15 05:27:52    分类:问答    asp.net-mvc-5   hangfire

Scheduled tasks limitations (or how tasks persistence is implemented)?

I've started to read Hangfire documentation, and found nothing about task limitations. As declared, tasks (or jobs) are stored somewhere. Since they are just delegates, the only thing could be stored, as far as I understand, is a delegate "body" (IL?). But there could be closures, that provides some context for the task, e.g., some external services, that can require to load extra assemblies to run their code, etc. How Hangfire deals with this? Can task contain any instructions in its body, or there are any limitations?

2021-06-14 03:47:19    分类:问答    c#   hangfire

Hangfire Background Job with Return Value

I'm switching from Task.Run to Hangfire. In .NET 4.5+ Task.Run can return Task<TResult> which allows me to run tasks that return other than void. I can normally wait and get the result of my task by accessing the property MyReturnedTask.Result Example of my old code: public void MyMainCode() { List<string> listStr = new List<string>(); listStr.Add("Bob"); listStr.Add("Kate"); listStr.Add("Yaz"); List<Task<string>> listTasks = new List<Task<string>>(); foreach(string str in listStr) { Task<string> returnedTask = Task.Run(() => GetMyString(str)); listTasks.Add(returnedTask); } foreach(Task

2021-06-13 07:12:42    分类:问答    c#   asp.net   asynchronous   hangfire

Hangfire.Autofac 与 MVC 应用程序 - 注入失败(Hangfire.Autofac with MVC app - injection fails)

问题 我正在尝试创建一个简单的 Hangfire 测试,但它不起作用。 这是所有重要的代码,以及我如何使用 Hangire.Autofac 对其进行配置。 不确定我在这里缺少什么。 我在 /hangfire dashbaord 中遇到的异常也在下面。 public class AmazonSqsService : IAmazonSqsService { private readonly IBackgroundJobClient _backgroundJobClient; private readonly ILogService _logService; public AmazonSqsService(IBackgroundJobClient backgroundJobClient, ILogService logService) { _backgroundJobClient. = backgroundJobClient; _logService= logService; } public async Task<string> Test() { return _backgroundJobClient.Enqueue(() => Looper()); } public void Looper() { while (true) { _logService.Info("In Looper

2021-06-12 17:24:17    分类:技术分享    c#   hangfire

Hangfire 和 VB.NET - 在应用程序启动类中配置的获取事物(Hangfire and VB.NET - Gettings things configured in the Application Startup class)

问题 本周早些时候,我看到了 Scott Hanselman 关于 ASP.NET 中后台处理的帖子 (http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)。 我过去写过一些例程,它每隔一段时间就会自动点击一个页面来运行一些任务,但这个后台处理的想法是我从来没有考虑过的,Hangfire (http://hangfire.io/) 看起来很适合我的背景处理需求(主要是发送邮件)。 为了让 HangFire 运行(通过 NuGet 安装后),我需要在 Application Startup 类中启动它。 该文档提供了我不确定如何转换为 VB.NET 的 C# 代码。 它看起来像一些 lambda 代码,我通过使用 LINQ 对它有些熟悉,但我无法快速弄清楚这一点。 public void Configure(IAppBuilder app) { app.UseHangfire(config => { config.UseSqlServerStorage("<connection string or its name>"); config.UseServer(); }); } 这是我开始的地方,基本上几乎没有,我知道...... :) Public Sub Configuration(app As

2021-06-12 10:37:13    分类:技术分享    c#   asp.net   vb.net   background-process   hangfire