问题标签 [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 投票
1 回答
3757 浏览

c# - Hangfire 配置问题(Common.Logging.Core & Common.Logging.LogManager)

我已经通过 Visual Studio 2012 中的“管理 NuGet 包”选项安装了 Hangfire。我将 SQL Server 2008 R2 用于一个项目,将 SQL Server 2012 Enterprise 用于另一个项目。我的项目与.Net 4.0 兼容,所以我无法下载与.Net4.5 兼容的最新Hangfire,所以我通过NuGet 下载了Hangfire (.Net 4.0)。

我根据 Owin & Hangfire 配置的要求添加了一个新的启动文件。该文件如下:

Hangfire 安装自动在 web.config 中添加以下行:

当我运行该项目时,我在第 29 行收到以下错误:

当我在 web.config 中评论 Common.Logging.Core 的依赖程序集时,我在第 30 行收到以下错误:

不同版本的 Common.Logging.Core dll 似乎存在配置问题(不兼容),请注意我的 bin 文件夹中只有一个文件 Common.Logging.Core (V3.0.0.0),我试图查找 V2.2.0.0 以检查这是否可以解决“无法加载 Common.Logging.LogManager”但我在网络上找不到此 dll,请指教。

请注意,安装没有创建 HangFireConfig.cs 文件。

感谢您的阅读,任何帮助将不胜感激。

0 投票
1 回答
3969 浏览

c# - 使用 NLog 从 Hangfire 计划的后台作业记录日志

所以我的问题如下:我安排到/使用 Hangfire 的方法/功能使用 NLog 执行大量相关信息的记录。在没有hangfire 的情况下运行该方法时,我得到了我想要的所有日志信息,但是当我使用hangfire 安排该方法时,所有这些日志记录都将丢失。

我知道 Hangfire 使用 NLog(或您喜欢的任何其他日志记录框架)用于其自己的日志记录目的。我正在使用来自 ASP.NET MVC4 Web 应用程序的 Hangfire。我正在使用 Ninject 并使用 OWIN Startup 类设置挂起,目前看起来像这样:

我想要完成的是 Hangfire 可以进行自己的日志记录,而我计划的工作也完成了所有的日志记录,我不关心它在一个或多个文件中。目前 Hangfire 正在正确地进行日志记录,即:

等等

但是从预定作业的日志记录无处可寻。

我想问的是:我如何从预定的方法/作业中记录?我的猜测是我在某处缺少依赖/上下文,但我真的不知道 atm。

0 投票
5 回答
15470 浏览

c# - 禁用重新排队失败的 Hangfire BackgroundJob

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

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

0 投票
1 回答
19215 浏览

c# - 具有返回值的 Hangfire 后台作业

我正在从Task.Run切换到Hangfire。在 .NET 4.5+Task.Run中可以返回Task<TResult>,这允许我运行返回的任务不是void. 我通常可以通过访问属性等待并获得任务的结果MyReturnedTask.Result

我的旧代码示例:

据我从 Hangfire 的快速启动页面所见,您的主要人员BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget")); 完美地将代码作为后台作业运行,但显然不支持具有返回值的作业(如我上面提供的代码)。那正确吗?如果没有,我该如何调整我的代码以使用 Hangfire?

PS 我已经看过HostingEnvironment.QueueBackgroundWorkItem这里),但它显然缺乏相同的功能(必须有后台工作void

编辑

正如@Dejan 发现的那样,我想切换到 Hangfire 的主要原因与 .NETQueueBackgroundWorkItem人员在 .NET 4.5.2 中添加的原因相同。Scott Hanselman关于 ASP.NET 中的后台任务的精彩文章很好地描述了这个原因。所以我要引用这篇文章:

QBWI (QueueBackgroundWorkItem) 调度一个可以在后台运行的任务,独立于任何请求。这与普通的 ThreadPool 工作项不同,因为 ASP.NET 自动跟踪通过此 API 注册的工作项当前正在运行,并且 ASP.NET 运行时将尝试延迟 AppDomain 关闭,直到这些工作项完成执行。

0 投票
2 回答
2153 浏览

asp.net-mvc - Autofac (+MVC + EF + SignalR + Hangfire) 生命周期范围

我有一个使用实体框架、SignalR 和 Hangfire 作业的 ASP.NET MVC 项目。

我的主(根)容器是这样定义的:

对于 MVC,我使用 Autofac.MVC5 nuget 包。依赖解析器:

对于 SignalR,我使用的是 Autofac.SignalR nuget 包。依赖解析器:

我的 signalR 集线器以这种方式实例化(http://autofac.readthedocs.org/en/latest/integration/signalr.html#managing-dependency-lifetimes):

对于 Hangfire,我使用的是 Hangfire.Autofac 包:

作业以这种方式实例化:

问题/问题:我总是在集线器和作业中获得相同的 DbContext 实例。我希望所有集线器实例都将获得相同的 ChatService,但 DbContext(它是 ChatService 的依赖项)将始终是一个新实例。此外,Hangfire 工作也应该采取同样的行动。

可以做到这一点,还是我错过了什么?

更新1:

经过思考(和睡过头),我想我有两个选择。我仍然想保留“每个请求的会话”(“每个集线器的会话”,“每个作业的会话”)。

选项1:

更改所有服务都将具有 InstancePerLifetimeScope。服务的实例化并不昂贵。对于维护某种状态的服务,我将创建另一个“存储”(类),它将是 SingleInstance 并且不会依赖于会话(DbContext)。我认为这也适用于集线器和工作。

选项 2:

创建@Ric .Net 建议的某种工厂。像这样的东西:

我认为这适用于 MVC,但我不知道让它适用于集线器(每个集线器调用都是集线器的新实例)和作业(每次运行作业都是作业类的新实例) .

我倾向于选项 1。你怎么看?

非常感谢!

0 投票
4 回答
2168 浏览

visual-studio - 如何在发布期间从预编译中排除 cshtml

我在 ac# Web 表单项目中有 cshtml 文件,我想使用具有以下选项的发布配置文件进行发布:

  • 允许预编译站点可更新 = false

我在 ASP.net http://aboutcode.net/postal/outside-aspnet.html之外使用 Postal ,因为正在发送的电子邮件来自后台进程。这是使用hangfire,与此非常相似: //docs.hangfire.io/en/latest/tutorials/send-email.html

问题是当我不希望cshtml文件被预编译时,文件的结果内容是:

这是预编译工具生成的标记文件,请勿删除!

我需要原始 cshtml 文件的全部内容并且不想要标记内容,但我也想保留设置,Allow precompiled site to be updateable = false以便无法更新所有其他文件。

我能看到的唯一方法就是拥有Allow precompiled site to be updateable = true

简而言之,我想以与将构建操作设置为内容时的图像文件相同的方式部署 cshtml。

有任何想法吗?

编辑: 似乎其他人也有完全相同的问题:

有没有办法从“预编译”选项中排除某些 .cshtm 文件或整个文件夹,以便 .cshtml 文件可以在 MVC 之外使用?

0 投票
1 回答
1089 浏览

c# - Hangfire 处理定义为 SingleInstance 的 autofac 依赖项

在 ASP.NET 应用程序中使用 hangfire 1.3.4 和 hangfire.autofac 1.0.0。我有以下情况:

我看到的是 Autofac 按要求执行循环作业,然后处理 MyType 的实例,这显然会导致后续调用失败,因为它被定义为单例,并且应该在关闭时由 Autofac 处理。

我错过了什么还是这是一个错误?

这是调用堆栈:

MyDll.dll!MyType.Dispose() 第 316 行 C# Hangfire.Core.dll!Hangfire.Common.Job.Dispose(object instance) Unknown Hangfire.Core.dll!Hangfire.Common.Job.Perform(Hangfire.JobActivator 激活器, Hangfire .IJobCancellationToken cancelToken) Unknown Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.PerformJobWithFilters.AnonymousMethod__6() Unknown Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.InvokePerformFilter(Hangfire.Server.IServerFilter filter, Hangfire.Server.PerformingContext preContext , System.Func 继续) Unknown Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.PerformJobWithFilters.AnonymousMethod__8() Unknown Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.InvokePerformFilter(Hangfire.Server.IServerFilter filter, Hangfire.Server. PerformingContext preContext,System.Func 继续)未知 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.PerformJobWithFilters.AnonymousMethod__8()未知 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.PerformJobWithFilters(Hangfire.Server.PerformContext 上下文,Hangfire.Server.IJobPerformer执行者,System.Collections.Generic.IEnumerable 过滤器)未知 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.Run(Hangfire.Server.PerformContext 上下文,Hangfire.Server.IJobPerformer 执行者)未知 Hangfire.Core.dll!Hangfire.Server .Worker.ProcessJob(string jobId, Hangfire.Storage.IStorageConnection 连接, Hangfire.Server.IJobPerformanceProcess 进程, System.Threading.CancellationToken shutdownToken) 未知 Hangfire.Core.dll!Hangfire.Server.Worker.Execute(System.Threading.CancellationToken cancelToken) 未知 Hangfire.Core.dll!Hangfire.Server.AutomaticRetryServerComponentWrapper.ExecuteWithAutomaticRetry(System.Threading.CancellationToken cancelToken) 未知 Hangfire.Core.dll!Hangfire.Server.AutomaticRetryServerComponentWrapper.Execute(System.Threading.CancellationToken cancelToken) 未知 Hangfire。 Core.dll!Hangfire.Server.ServerSupervisor.ExecuteComponent() 未知 Hangfire.Core.dll!Hangfire.Server.ServerSupervisor.RunComponent() 未知 mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(对象状态) 未知 mscorlib.dll! System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback 回调,对象状态,bool preserveSyncCtx)未知 mscorlib.dll!系统。Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) 未知 mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading。 ContextCallback 回调,对象状态)未知 mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() 未知 [本机到托管转换]ThreadStart() 未知 [本机到托管转换]ThreadStart() 未知 [本机到托管转换]

0 投票
1 回答
1322 浏览

asp.net - 如何对集线器进行 SignalR 外部引用而不执行循环引用?

因此,我正在尝试创建一个包含以下组件/功能的示例:

  • 从 Windows 服务自托管的 hangfire 服务器 OWIN
  • 作业完成时的 SignalR 通知

Github 项目

我可以将任务排队并执行,但我很难弄清楚如何在任务/作业完成时通知客户(目前都是,直到我让它正常工作)。

我当前的问题是我希望 SignalR 集线器位于“核心”库SampleCore中,但在启动 webapp SampleWeb时我看不到如何“注册” 。我解决这个问题的一种方法是创建一个集线器类NotificationHubProxy,它继承了实际的集线器,并且适用于简单的东西(从一个客户端向所有人发送消息)。

NotifyTaskComplete中,我相信我可以获取集线器上下文,然后像这样发送消息:

但是,如果 NotificationHubProxy 是被使用的类,因为它是 SampleWeb 库的一部分并且从 SampleCore 引用它会导致循环引用,我不能这样做。

我知道主要问题是外部程序集中的集线器,但我一辈子都找不到使用 SignalR 或 MVC5 或以这种特殊方式设置的相关示例。

有任何想法吗?

0 投票
1 回答
7844 浏览

c# - SqlException - 从服务器接收结果时发生传输级错误

我正在编写一个 MVC 5 互联网应用程序,并且我有一个每小时执行一次的重复任务。此任务使用 DbContext 类更新一些模型对象。该应用程序部署为 Azure 网站。

我每隔几个小时就会收到以下错误:

System.Data.SqlClient.SqlException (0x80131904):从服务器接收结果时发生传输级错误。(提供者:TCP Provider,错误:0 - 信号量超时期限已到期。)---> System.ComponentModel.Win32Exception (0x80004005):信号量超时期限已到期

为什么是这样?另外,我怎样才能防止这种情况发生?

提前致谢。

0 投票
0 回答
630 浏览

hangfire - Hangfire 减少成功作业的记录

在 Azure Web 作业中运行的控制台应用程序中,我有 16 个类似于下面的重复作业。

每次运行它都会进入 Hangfire UI 的 Succeeded Jobs 视图。在成功的工作视图中,每分钟有 16 个这样的噪音将成为无用的噪音。

如何阻止此重复作业或所有重复作业登录成功的作业?

仅供参考 Execute() 开始

因此将记录执行过程。