问题标签 [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 配置和 Ninject 配置
我有一个使用 Ninject 的 MVC 5 应用程序,我正在向其中添加 Hangfire。
添加 Ninject 后,我使用了NinjectWebCommon
nuget 包,因为它配置简单。所以现在 Ninject 是通过NinjectWebCommon
创建标准内核并添加绑定的类来配置的。
此外,我创建了一些在创建内核时加载的自定义模块
Ninject Web Common 通过WebActivatorEx
类注册
现在的问题与如何让 Hangfire 看到 Ninject 配置有关。通过查看Hangfire.Ninject
我可以阅读的包裹
该包提供了 IGlobalConfiguration 接口的扩展方法:
var kernel = new StandardKernel();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
现在我的问题是:
- 由于
IGlobalConfiguration
界面的关系,我应该在 OWIN 启动方法中添加 Hangfire Ninject 配置(已经放置了 Hangfire 配置)。我应该如何获得当前的 Ninject 内核(NinjectWebCommon 配置的内核? - 执行顺序呢?是在
WebActivatorEx
OWIN 启动之前还是之后执行? - 如果我尝试执行两次配置会发生什么?
更一般地说,如何在两者之间共享 Ninject 配置?
c# - Hangfire + Crystal Reports 电子邮件?
我正在努力做到这一点,以便我们可以每天生成某些报告并将它们通过电子邮件发送给列表中的一群人。
我已经为重复性工作测试了 Hangfire,它运行良好。所以这不是问题。但我正在尝试从我现有的 Crystal Report 文件 (.rpt) 创建一个报告。基本上我想做到这一点,以便在执行此作业时,代码将创建报告,将其以 PDF 格式保存到指定路径的磁盘中,然后我可以将其作为附件通过电子邮件发送给人们。因此,无需能够在网页上查看报告。这个想法实际上是在后面的代码中生成报告,将其保存为 PDF,并在保存后从后面的代码中通过电子邮件发送它。
我遇到的问题与水晶报告的实际生成和保存有关。顺便说一句,我正在测试中生成一个 excel 文件,但我会将其更改为 PDF 以获取实际报告。这是我迄今为止生成报告的内容:
此代码位于 Web 应用程序的 global.asax 文件中的 Application_Start 处调用的方法中。当我运行应用程序时,当我在 Hangfire 仪表板中查看失败的作业时,作业失败并引发此错误,即使我知道我的代码中的路径是正确的:
System.IO.FileNotFoundException 无法加载文件或程序集“App_global.asax.twm32qri,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。
System.IO.FileNotFoundException:无法加载文件或程序集“App_global.asax.twm32qri,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。文件名:'App_global.asax.twm32qri, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName,ObjectHandleOnStack 类型)在 System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔 throwOnError,布尔 ignoreCase,布尔反射,StackCrawlMark 和 stackMark,IntPtr pPrivHostBinder,布尔 loadTypeFromPartialName)在 System.Type.GetType(字符串 typeName,
警告:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。注意:与程序集绑定失败日志记录相关的一些性能损失。要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
编辑:
我也遇到了另一个错误。这与加载报告文件有关。
失败 执行作业期间发生异常。CrystalDecisions.CrystalReports.Engine.LoadSaveReportException
报告文件路径无效。
CrystalDecisions.CrystalReports.Engine.LoadSaveReportException:报告文件路径无效。在 CrystalDecisions.CrystalReports.Engine.ExceptionThrower.ThrowEngineException(String messageID, EngineExceptionErrorID id) 在 CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob) 在 CrystalDecisions.CrystalReports.Engine.ReportDocument.EnsureLoadReport() 在CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDatabaseLogon(String user, String password) 在 路径\Global.asax.cs:line 98中的 Intranet.Global.GenerateReport()
hangfire - 将 Hangfire 与 Redis 一起使用,是否有一种简单的方法可以使用 key-hashes 将作业分区到各种 Redis 服务器?
我们目前正在将 Hangfire 与 MSSQL 一起使用,并希望通过迁移到 Redis 来提高我们任务的吞吐量。
通过 key-hash 进行分片(分区)非常简单、可扩展且易于维护。我们目前无法访问 Redis 集群。因此,我们要满足两个要求:
- 通过配置文件将 Redis 服务器列表传递给 Hangfire。
- 让任何给定的密钥可预测地转到任一服务器(类似于 Memcached)
这样我们就可以在“n”个 Redis 服务器之间分配任意数量的作业。
我意识到 Hangfire 有两个部分:存储和工作。我很好奇这两个组件如何在 Redis 分片环境中工作。
我意识到 Twemproxy 等第三方组件有助于解决这些问题,但由于密钥散列方法非常简单,我想我会在实施 Twemproxy 之前用尽这条途径。
谢谢!
hangfire - Hangfire Job:触发但不执行,仍然状态为成功
我使用 Hangfire 执行了一项特定的工作,但它没有执行并返回成功,它没有显示任何异常,它只是直接成功,可能是什么问题:
下面是函数签名:
asp.net - Hangfire 没有活动服务器
在发布 ASP MVC 应用程序后,Hangfire Dashboard 说它没有活动服务器。试图重新启动、重建、删除数据库中的 Hangfire 表 - 没有成功。OWIN 启动类:
hangfire - Hangfire 将重复作业排队
我使用hangfire 来运行重复的工作。我的工作是从数据库中获取当前数据,执行操作并跟踪已处理的记录。如果这一分钟没有运行作业 - 我不需要在下一分钟运行两次。
不知何故,我让我的重复性工作(1 分钟周期)被成千上万的人排队,从未执行过。当我重新启动我的 IIS 时,它试图一次执行它们并阻塞数据库。
除了解决不执行的问题,有没有办法阻止他们排队?
c# - 更新 HangFire RecurringJob 中的方法时间?
我刚刚发现使用HangFire,您可以在 .Net 应用程序中运行后台作业,但是当我测试它的功能时,我意识到我添加到1 分钟 RecurringJob的方法中的时间不会改变,即使该方法被多次触发次:
方法:
RecurringJob 声明:
我的问题:
是否可以在RecurringJob调用上述方法时显示时间更新?
asp.net-web-api2 - 带有 Hangfire 抛出异常 DependencyResolutionException 的 Autofac 作业激活器
我的项目结构是一样的:
https://github.com/MarlabsInc/webapi-angularjs-spa
我已按照以下说明进行操作:
http://docs.hangfire.io/en/latest/background-methods/using-ioc-containers.html
所以我创建了一个容器作业激活器。
在我的 Bootstrapper.cs
我的启动类有一个方法:
在控制器中:我正在尝试将 2000 张发票的状态更新为“已批准”所以该方法很简单,如下所示:
现在当我在 SQL 中查询时:
我在数据列中得到以下异常:
{"FailedAt":"2015-07-07T10:00:40.9454943Z","ExceptionType":"Autofac.Core.DependencyResolutionException","ExceptionMessage":"没有标签匹配 'AutofacWebRequest' 的范围在范围内可见请求了哪个实例。这通常表明一个注册为 per-HTTP 请求的组件正在被 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,从不来自容器本身。","ExceptionDetails":"Autofac.Core.DependencyResolutionException: 从请求实例的范围中看不到带有匹配 'AutofacWebRequest' 的标记的范围。这通常表明注册为 per-HTTP 请求的组件正在由 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,而不是从容器本身.\r\n 在 Autofac.Core.Lifetime.MatchingScopeLifetime.FindScope(ISharingLifetimeScope mostNestedVisibleScope)\r\n 在 Autofac.Core.Resolving.InstanceLookup..ctor(IComponentRegistration 注册,IResolveOperation 上下文,ISharingLifetimeScope mostNestedVisibleScope,IEnumerableCurrent 或 ILifetimeScopeProvider.RequestLifetime,从不来自容器本身。\r\n Autofac.Core.Lifetime.MatchingScopeLifetime.FindScope(ISharingLifetimeScope mostNestedVisibleScope)\r\n Autofac.Core.Resolving.InstanceLookup..ctor(IComponentRegistration registration, IResolveOperation上下文, ISharingLifetimeScope mostNestedVisibleScope, IEnumerableCurrent 或 ILifetimeScopeProvider.RequestLifetime,从不来自容器本身。\r\n Autofac.Core.Lifetime.MatchingScopeLifetime.FindScope(ISharingLifetimeScope mostNestedVisibleScope)\r\n Autofac.Core.Resolving.InstanceLookup..ctor(IComponentRegistration registration, IResolveOperation上下文, ISharingLifetimeScope mostNestedVisibleScope, IEnumerable
1 parameters)\r\n at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable
1 个参数)\r\n 在 Autofac.Core.Resolving.ResolveOperation.ResolveComponent(IComponentRegistration 注册,IEnumerable1 parameters)\r\n at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable
1 个参数)\r\n 在 Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration 注册,IEnumerable1 parameters)\r\n at Autofac.Core.Container.ResolveComponent(IComponentRegistration registration, IEnumerable
1 个参数)\r\ n at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable1 parameters, Object& instance)\r\n at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable
1 parameters)\r\n at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)\r\n at Autofac.ResolutionExtensions.Resolve (IComponentContext 上下文,键入 serviceType)\r\n 在 Hangfire.AutofacJobActivator.ActivateJob(键入 jobType)\r\n 在 Hangfire.Common.Job.Activate(JobActivator activator)"}
有人可以帮我理解我做错了什么吗?
asp.net-web-api - Hangfire、Autofac 和 WebApi
我最近了解了 Hangfire,但到目前为止还没有运气。我的项目使用 autofac,所以我将 HangFire.1.4.3 和 HangFire.Autofac.1.1.0 nuget 包添加到我的项目中。接下来是我创建了 Startup 类并在那里注册 Hangfire 的文档
之后我更新了 WebApiConfig 并在 Hangfire 中注册了我的 Autofac 容器
当我尝试运行 Hangfire 工作时
我收到以下错误
System.InvalidOperationException MyNamespace.IMyInterface 类型在 Hangfire.Storage.InvocationData.Deserialize() 中不包含带有签名 MyMethod(IObject1)` 的方法 可能是什么问题?
mongodb - 在 Visual Studio 2013 中无法引用 Hangfire.Mongo
我这样做了:
- 在 Visual Studio 2013 中创建新的 WebAPI 项目
- 包管理器控制台:安装包 HangFire
- 包管理器控制台:Install-Package HangFire.Mongo
- 将示例代码放入 Global 并创建此处描述的示例 Startup 类https://github.com/sergun/Hangfire.Mongo
当我编译时,我得到命名空间的错误The type or namespace name 'Mongo' does not exist in the namespace 'Hangfire'
,Hangfire.Mongo
但我显然有参考。