问题标签 [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.
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 文件。
感谢您的阅读,任何帮助将不胜感激。
c# - 使用 NLog 从 Hangfire 计划的后台作业记录日志
所以我的问题如下:我安排到/使用 Hangfire 的方法/功能使用 NLog 执行大量相关信息的记录。在没有hangfire 的情况下运行该方法时,我得到了我想要的所有日志信息,但是当我使用hangfire 安排该方法时,所有这些日志记录都将丢失。
我知道 Hangfire 使用 NLog(或您喜欢的任何其他日志记录框架)用于其自己的日志记录目的。我正在使用来自 ASP.NET MVC4 Web 应用程序的 Hangfire。我正在使用 Ninject 并使用 OWIN Startup 类设置挂起,目前看起来像这样:
我想要完成的是 Hangfire 可以进行自己的日志记录,而我计划的工作也完成了所有的日志记录,我不关心它在一个或多个文件中。目前 Hangfire 正在正确地进行日志记录,即:
等等
但是从预定作业的日志记录无处可寻。
我想问的是:我如何从预定的方法/作业中记录?我的猜测是我在某处缺少依赖/上下文,但我真的不知道 atm。
c# - 禁用重新排队失败的 Hangfire BackgroundJob
有没有办法禁用失败的 Hangfire BackgroundJob 的重新排队?
我们不希望再次执行失败的作业,因为这可能会导致问题。
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 关闭,直到这些工作项完成执行。
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。你怎么看?
非常感谢!
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 之外使用?
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() 未知 [本机到托管转换]
asp.net - 如何对集线器进行 SignalR 外部引用而不执行循环引用?
因此,我正在尝试创建一个包含以下组件/功能的示例:
- 从 Windows 服务自托管的 hangfire 服务器 OWIN
- 作业完成时的 SignalR 通知
我可以将任务排队并执行,但我很难弄清楚如何在任务/作业完成时通知客户(目前都是,直到我让它正常工作)。
我当前的问题是我希望 SignalR 集线器位于“核心”库SampleCore中,但在启动 webapp SampleWeb时我看不到如何“注册” 。我解决这个问题的一种方法是创建一个集线器类NotificationHubProxy,它继承了实际的集线器,并且适用于简单的东西(从一个客户端向所有人发送消息)。
在NotifyTaskComplete中,我相信我可以获取集线器上下文,然后像这样发送消息:
但是,如果 NotificationHubProxy 是被使用的类,因为它是 SampleWeb 库的一部分并且从 SampleCore 引用它会导致循环引用,我不能这样做。
我知道主要问题是外部程序集中的集线器,但我一辈子都找不到使用 SignalR 或 MVC5 或以这种特殊方式设置的相关示例。
有任何想法吗?
c# - SqlException - 从服务器接收结果时发生传输级错误
我正在编写一个 MVC 5 互联网应用程序,并且我有一个每小时执行一次的重复任务。此任务使用 DbContext 类更新一些模型对象。该应用程序部署为 Azure 网站。
我每隔几个小时就会收到以下错误:
System.Data.SqlClient.SqlException (0x80131904):从服务器接收结果时发生传输级错误。(提供者:TCP Provider,错误:0 - 信号量超时期限已到期。)---> System.ComponentModel.Win32Exception (0x80004005):信号量超时期限已到期
为什么是这样?另外,我怎样才能防止这种情况发生?
提前致谢。
hangfire - Hangfire 减少成功作业的记录
在 Azure Web 作业中运行的控制台应用程序中,我有 16 个类似于下面的重复作业。
每次运行它都会进入 Hangfire UI 的 Succeeded Jobs 视图。在成功的工作视图中,每分钟有 16 个这样的噪音将成为无用的噪音。
如何阻止此重复作业或所有重复作业登录成功的作业?
仅供参考 Execute() 开始
因此将记录执行过程。