问题标签 [hangfire-autofac]

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 投票
1 回答
4929 浏览

c# - 在 WebApi 中使用 Autofac 的 Hangfire

我在 startup.cs 中有以下配置,但我收到了错误,尽管我已经安装了Hangifre.Autofacnuget 包并进行了配置。

从请求实例的范围中看不到带有与“AutofacWebRequest”匹配的标记的范围。这通常表明注册为 per-HTTP 请求的组件正在由 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,而不是从容器本身.

启动.cs

CurrencyRatesJob.cs

0 投票
1 回答
1678 浏览

c# - 服务器上的 HangFire 重复作业失败,出现 Autofac.Core.Registration.ComponentNotRegisteredException 或无无参数异常

我刚刚开始使用 HangFire。当我从 IIS Express 本地运行它时,这些作业似乎工作正常,但是当我在我的开发服务器上运行它时,我得到没有定义无参数构造函数的错误。我之前使用的是 Simple Injector,但现在我已经转向 Autofac。

这是我注册依赖项的代码。

有人可以告诉我我做错了什么吗?我也在 Hangfire 论坛上发布了这个

0 投票
0 回答
878 浏览

asp.net-mvc - 在 ASP.NET MVC 的异步操作中使用 Hangfire 排队 BankgroundJob 冻结应用程序

我在我的一个控制器上执行此操作,该操作由另一个方法调用,该方法也由另一个操作调用。

一切正常,除非我尝试加入 Hangfire一些工作:_bankClient.FetchAndEnsureTransactionsAsync_bankClient.RefreshItemAsync. 这导致应用程序冻结(客户端、浏览器在服务器仍在运行时停止)。我想这有点奇怪deadlock,但我尝试过的任何东西似乎都无法让它发挥作用!

有人知道如何解决这个问题吗?

我知道Hangfire还不支持调用async方法,所以我有synchronous我排队的这个方法的版本。

工作的动作

工作动作:

先例动作由私有方法调用:

此操作已被另一个操作调用:

同步版本:正在排队:

0 投票
0 回答
110 浏览

c# - 每十分钟在后台发送定期邮件

我想在应用程序启动后每十分钟向管理员发送一次邮件。简单的重复任务一直在运行。但是当我尝试发送邮件时,我得到“Autofac.Core.Registration.ComponentNotRegisteredException”。这是我所做的。

我创建了一个中间件“SchedularMiddleware”,并像在 startup.cs 中的 Configure 方法一样使用它

这是SchedularMiddleware

这是服务的实现

这个简单的任务正在运行,但是当我尝试发送邮件时出现错误。

这是错误的堆栈跟踪。

0 投票
3 回答
4888 浏览

c# - 解决 .NET Core 启动中的 Hangfire 依赖项/HttpContext

我已经在我的 .NET Core Web 应用程序的 Startup 类中安装并配置了 Hangfire,如下所示(删除了很​​多非 Hangfire 代码):

如您所见,我正在使用 Autofac 进行 DI。每次执行 Hangfire 作业时,我都会进行设置以注入一个新容器。

目前,我已经UseHangfireDashboard()注释掉了添加我的经常性工作的调用,并且我在引用的行上收到以下错误IPrincipal

System.NullReferenceException:“对象引用未设置为对象的实例。”

我了解 Hangfire 没有HttpContext. 我不确定为什么它甚至会为 Hangfire 线程触发那行代码。我最终将需要为我的 IPrincipal 依赖项解析一个服务帐户。

如何解决 Hangfire 和 HttpContext 的问题?

0 投票
1 回答
867 浏览

c# - Hangfire Autofac 集成无法解析具有注册依赖项的服务

我正在使用 hangfire 来启动后台作业,但是当我尝试使用 hangfire autofac 与 generic 的集成来自动解决它不起作用的任务服务时遇到了问题,因为它无法解决依赖项之一。我想是因为我没有收到任何错误。

如果我通过自己解决来使用相反的方法,它就可以工作。

我发现在我的构造函数中,我有一个导致问题的测试服务。如果我在构造函数中删除服务,服务就会得到解决。

我在启动类中配置了 autofac,如下所示:

0 投票
2 回答
1625 浏览

hangfire - 从外部 API 调用 Hangfire 作业(重复作业)

我一直在我们的项目中使用 Hang-fire,但有一个问题,我可以从 API 调用 Hangfire Recurring Job 吗?

例如: http : //devmyproject.com/projectname/recurring 是 Hangfire Web 应用程序获取重复工作的 url。现在从我的 webApi 项目中,我想调用这个 Url 并调用一个 Job 来运行。这可能吗?

谢谢

0 投票
2 回答
1155 浏览

asp.net-web-api - Hangfire 正在按顺序运行作业

我正在使用由 IIS 托管的 HangFire,其应用程序池设置为“AlwaysRunning”。我正在使用 DI 的 Autofac 扩展。目前,当使用 HangFire 运行后台作业时,它们是按顺序执行的。这两个工作性质相似,都涉及文件 I/O。第一个作业执行并开始生成必需的文件。第二个作业执行并开始执行。然后它将停止执行,直到第一个作业完成,此时第二个作业被恢复。我不确定这是否与 DI 和生命周期范围有关。我倾向于不这样认为,因为我创建了每个依赖范围的实例。我正在使用 owin 引导hangfire,并且没有传递任何 BackgroundServer 选项,也没有通过属性应用任何提示。什么会导致作业按顺序执行?我正在使用工人的默认配置。我正在向 web api 发送一个发布请求,并使用以下内容将作业添加到队列中BackgroundJob.Enqueue<ExecutionWrapperContext>(c => c.ExecuteJob(job.SearchId, $"{request.User} : {request.SearchName}"));

提前致谢

0 投票
0 回答
510 浏览

c# - 无法在 hangfire 服务器中排队我的工作

我正在我的应用程序中使用hangfire 进行排队工作。

我的排队工作声明如下,

当这将我的工作成功排入队列但在状态表中收到这样的错误消息时,

“FailedAt”:“2018-03-21T13:14:46.0172303Z”,“ExceptionType”:“System.MissingMethodException”,“ExceptionMessage”:“没有为此对象定义无参数构造函数。”,
“ExceptionDetails”:“System.MissingMethodException : 没有为此对象定义无参数构造函数。\r\n 在 System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)\r\n
在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)\r\n at System.Activator.CreateInstance(Type type, Boolean nonPublic)\r\n at System.Activator.CreateInstance(Type type) \r\n 在 Hangfire.JobActivator.SimpleJobActivatorScope.Resolve(类型类型)\r\n
在 Hangfire.Server.CoreBackgroundJobPerformer.Perform(PerformContext context)\r\n 在 Hangfire.Server.BackgroundJobPerformer.<>c__DisplayClass8_0.b__0()\r\n 在 Hangfire.Server.BackgroundJobPerformer.InvokePerformFilter(IServerFilter filter, PerformingContext preContext, Func 1 续)\r\n 在 Hangfire.Server.BackgroundJobPerformer.PerformJobWithFilters(PerformContext 上下文,IEnumerable`1 过滤器)\r\n 在 Hangfire.Server.BackgroundJobPerformer.Perform(PerformContext 上下文)\r\n 在 Hangfire.Server.Worker .PerformJob(BackgroundProcessContext 上下文,IStorageConnection 连接,字符串 jobId)"

这个 DI 问题是否会产生这种类型的错误?

我使用此链接的参考在 Enqueue 中使用了调用方法

使用 DI 和 IOC 的工厂方法

例如,

我的代码是这样的,

0 投票
1 回答
3225 浏览

c# - 如何在 C# 中使用 JobStorage 获取所有 Hangfire 作业的列表?

我正在Hangfire BackgroundJob使用以下代码在 C# 中创建后台作业。

它创建 Jobserver 对象,然后,我正在创建 Schedule, Recurring Jobs,如下所示。

之后,我想在我的应用程序停止或关闭时删除或停止所有作业。因此,在我的应用程序的 OnStop 事件中,我编写了以下代码。

但是,上面获取所有作业和所有队列的代码不起作用。它总是返回"default"队列而不返回所有作业。

谁能想到使用 Hangfire 获得所有工作JobStorage并在应用程序停止时停止这些工作?

任何帮助将不胜感激!

谢谢