'System.ArgumentNullException' 在 Hangfire 中
'System.ArgumentNullException' in Hangfire
我猜这里有几个问题,主要是hangfire在应用程序启动时抛出这个异常。
Exception thrown: 'System.ArgumentNullException' in
Hangfire.SqlServer.dll.
该应用程序仍然 运行 但它肯定不好。
第二个,我意识到在 hangfire 仪表板中注册了两台服务器,而不是只有一台。我刚开始使用hangfire,请帮我弄清楚是怎么回事。
这里是我如何在启动时注册hangfire并使用它。
配置服务
//HangFire
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
DisableGlobalLocks = true,
}));
services.AddHangfireServer(x => new BackgroundJobServerOptions {
ShutdownTimeout = TimeSpan.FromHours(24),
ServerTimeout = TimeSpan.FromHours(24)
});
配置
//HangFire
app.UseHangfireServer();
app.UseHangfireDashboard();
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
endpoints.MapHangfireDashboard();
});
BackgroundJob.Enqueue(() => Console.WriteLine("Hello world from Hangfire!"));
问题出在 ConfigureServices
我尝试注册 AddHangfireServer()
方法,但也在 Configure
我调用了 app.UseHangfireServer();
。这导致 System.ArgumentNullException 在运行时,连接字符串等配置仅传递给一台 hangfire 服务器,但创建了两台。因此,要修复此错误,只需删除
ConfigureServices
.
中过多的 hangfire 服务器注册 (AddHangfireServer()
)
我猜这里有几个问题,主要是hangfire在应用程序启动时抛出这个异常。
Exception thrown: 'System.ArgumentNullException' in Hangfire.SqlServer.dll.
该应用程序仍然 运行 但它肯定不好。 第二个,我意识到在 hangfire 仪表板中注册了两台服务器,而不是只有一台。我刚开始使用hangfire,请帮我弄清楚是怎么回事。
这里是我如何在启动时注册hangfire并使用它。
配置服务
//HangFire
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
DisableGlobalLocks = true,
}));
services.AddHangfireServer(x => new BackgroundJobServerOptions {
ShutdownTimeout = TimeSpan.FromHours(24),
ServerTimeout = TimeSpan.FromHours(24)
});
配置
//HangFire
app.UseHangfireServer();
app.UseHangfireDashboard();
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
endpoints.MapHangfireDashboard();
});
BackgroundJob.Enqueue(() => Console.WriteLine("Hello world from Hangfire!"));
问题出在 ConfigureServices
我尝试注册 AddHangfireServer()
方法,但也在 Configure
我调用了 app.UseHangfireServer();
。这导致 System.ArgumentNullException 在运行时,连接字符串等配置仅传递给一台 hangfire 服务器,但创建了两台。因此,要修复此错误,只需删除
ConfigureServices
.
AddHangfireServer()
)