'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())