问题标签 [hangfire]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7424 浏览

c# - Hangfire 只运行一次后台作业

我有一个hangfire 服务器正在运行。我创建了一个后台作业如下

该作业应该只运行一次,但在门户网站的处理作业部分,我看到它一次运行多次。我如何防止这种情况并确保该工作只启动一次?

0 投票
1 回答
1552 浏览

asp.net - 当我在 iis 7.5 上部署我的 asp.net mvc-5 Web 应用程序时,hangfire 没有运行

我正在开发一个 asp.net mvc-5 Web 应用程序。我使用 nuget 工具在我的 Web 应用程序中安装了 hangfire 工具。

然后我创建以下startup.cs类,每分钟调用一个方法如下:-

这是将被调用的方法的定义:-

但目前我在 IIS 7.5 上部署我的应用程序,并且根本没有调用该方法。那么任何人都可以对此提出建议吗?

谢谢

0 投票
1 回答
857 浏览

hangfire - TaskCanceledException 导致 Hangfire 作业无限期处于处理状态

据我了解,Hangfire 还不支持异步方法。作为一种解决方法,我使用 AsyncEx 包装了我的异步方法调用,以使其从 Hangfire 的角度看起来是同步AsyncContext.Run()异常似乎按预期正确冒泡(从 展开AggregateException)。

但是,当TaskAsyncthrows时TaskCanceledException,Hangfire 不会正确地将其标记为“失败”。相反,它将尝试再次处理该作业。如果TaskAsync继续投掷TaskCanceledException,它将无限期地停留在该状态,而不是像往常一样在 10 次后停止重试。

似乎是因为 Hangfire 将OperationCanceledException其视为自己的控制流,而不是将其视为源自作业的异常。例如这里这里

除了用 包裹我所有的 Hangfire 工作之外,有什么办法可以绕过它catch TaskCanceledException

0 投票
1 回答
1201 浏览

c# - 在hangfire中运行的log4net内部方法的线程错误

我用hangfire运行进程,重复任务。这些任务设置为每分钟启动一次并处理数据库中的数千行。

我让它们在我的测试环境中顺利运行,直到我在这些方法中添加了 log4net 日志记录。现在 log4net 抛出一个线程错误。

不完全确定如何解决这个问题?

我已经读过,对于后台线程,您可以设置 IsBackground=true 并将销毁工作人员,但对我来说,这似乎是在 hangfire 子系统中进行管理。

我更关心从 log4net 修复它或以不同的方式编写方法。请注意,这是测试项目,但在真实环境中我不会直接调用 log4net,它将被包装在 LoggingService 中。对于这个测试,我只是想保持简单。除非我别无选择。

0 投票
1 回答
542 浏览

asp.net-mvc - MVC Hangfire 授权注入

我想将我的自定义服务注入 Hangfire AuthorizationFilter 并对其进行处理,但我遇到的问题是我的服务始终为空。

Owin启动类:

自定义过滤器:

Ninject 内核:

我没有看到我的错误你能帮我吗?

0 投票
1 回答
361 浏览

asp.net-mvc - IIS 工作进程忙于使用 Hangfire

我在我的 MVC webapp 中使用 Hangfire。我是这样配置的:

当我运行应用程序时,我看到IIS Worker Process它不断占用几乎 40% 的 CPU。

删除它会使应用程序正常工作。

怎么了?

0 投票
1 回答
1606 浏览

asp.net - 如何在长时间运行的方法执行期间避免任何超时

我正在开发一个 asp.net mvc 5 Web 应用程序,部署在 IIS-8 中,我的应用程序中有一个方法可以执行一项长时间运行的任务,主要扫描我们的网络以查找服务器和虚拟机,并使用扫描结果更新我们的数据库. 方法执行可能会持续 30-40 分钟才能在生产环境中完成。我正在使用一个名为 Hangfire 的计划工具,它每天会调用此方法 2 次。

这是 startup.cs 文件中的作业定义,它将在8:01 am&处调用方法8:01 pm:-

这是计划工具每天调用两次的方法:-

最后,进行真正扫描的方法是(我只提供该方法将做什么的高级描述):-

目前我在我们的测试环境上做了一些测试,一切都运行良好,扫描大约需要 25 秒来扫描 2 个测试服务器。但是现在我们计划将应用程序转移到生产环境中,我们有大约 120++ 个服务器要扫描. 所以我估计方法执行需要大约 30 -40 分钟才能在生产环境中完成。所以我的问题是如何确保此执行永不过期,并且 ScanNetwork() 方法将完成到最后?

0 投票
1 回答
176 浏览

c# - 返回站点选项不可用

在线文档中提到了返回站点按钮自定义的解决方案,如下所示。

我正在使用以下设置

令人惊讶app.UseHangfireDashboard("");的是,我的项目中没有在线文档中提到的。这就是我使用app.UseHangfire("");设置的原因

在子文件夹部署的情况下如何设置返回站点选项?

0 投票
1 回答
2151 浏览

c# - 需要创建表达式从字符串

Hangfire 是一个后台类方法运行器,它的循环作业函数 RecurringJob.AddOrUpdate(Expression< Action >,string) 是用于将方法添加到队列的方法。第一个参数是 Action 调用,第二个参数是 cron 格式的字符串。

如果我有类和函数名的字符串,我怎么能添加工作。

示例正常的非字符串调用将是:

我想做类似的事情

但这会在 AddOrUpdate 方法调用上引发错误:

无法创建 System.Linq.Expressions.Expression 类型的实例。类型是接口或抽象类,不能实例化。路径“类型”,第 1 行,位置 8。

我将如何通过字符串定义添加作业,或者如何从允许对象实例化和方法运行(new MyClass().Run()) 的字符串中创建表达式<Action>,如上例所示?

0 投票
4 回答
16849 浏览

asp.net - 如何防止 Hangfire 重复作业在连续执行 30 分钟后重新启动

我正在开发一个 asp.net mvc-5 Web 应用程序,并且在使用 Hangfire 工具运行长时间运行的后台作业时遇到了问题。问题是如果作业执行时间超过 30 分钟,hangfire 会自动启动另一个作业,所以我最终会同时运行两个类似的作业。

现在我有以下内容: -

  1. asp.net mvc-5
  2. IIS-8
  3. 挂火 1.4.6
  4. 视窗服务器 2012

现在我已经定义了一个hangfire 重复作业,在每天17:00 运行。后台作业主要扫描我们的网络中的服务器和虚拟机并更新数据库,重复作业将在完成执行后发送电子邮件。当执行时间少于 30 分钟时,重复性作业过去运行良好。但是今天随着我们系统的发展,重复性工作在 40 分钟后完成,而不是像以前那样需要 22-25 分钟。我收到了 2 封电子邮件而不是一封电子邮件(电子邮件之间的时间约为 30 分钟)。现在我手动重新运行作业,我注意到问题如下: -

“当循环作业连续执行 30 分钟时,将启动循环作业的新实例,所以我将有两个实例而不是一个同时运行,所以我收到了 2 封电子邮件。”

现在,如果重复作业的时间少于 30 分钟(例如 29 分钟),我不会遇到任何问题,但如果重复作业的执行时间超过 30 分钟,那么出于某种原因或另一个挂火将启动一个新作业。虽然当我在作业执行期间访问hangfire仪表板时,我发现只有一个活动作业,但当我监控我们的数据库时,我可以从sql分析器中看到有两个作业正在访问数据库。这发生在重复作业开始 30 分钟后(在我们的例子中是 17:30),这就是为什么我收到 2 封电子邮件,这意味着 2 个重复作业在后台运行,而不是一个。

那么,任何人都可以就此提出建议,如果当前的重复作业执行时间超过 30 分钟,我如何避免挂火自动启动新的重复作业?谢谢