C# 如何在asp.net core上添加带有自定义配置的Hangfire as服务
我不想给hangfire添加一些配置。使用文档化的方式很容易,但有一个选项取决于用户设置,因此我不想这样做:C# 如何在asp.net core上添加带有自定义配置的Hangfire as服务,c#,asp.net,asp.net-core,.net-core,hangfire,C#,Asp.net,Asp.net Core,.net Core,Hangfire,我不想给hangfire添加一些配置。使用文档化的方式很容易,但有一个选项取决于用户设置,因此我不想这样做: IGlobalConfiguration hangfireConfiguration = GlobalConfiguration.Configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRe
IGlobalConfiguration hangfireConfiguration = GlobalConfiguration.Configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings();
if (Configuration.GetValue<bool>("HangfireUseMemoryStorage"))
{
hangfireConfiguration.UseMemoryStorage();
}
else
{
hangfireConfiguration.UseStorage(new MySqlStorage(
Configuration.GetConnectionString("DefaultConnection"),
new MySqlStorageOptions
{
TablesPrefix = "Hangfire"
})
);
};
导致
cannot convert from 'Hangfire.IGlobalConfiguration' to 'System.Action<Hangfire.IGlobalConfiguration>'
无法从'Hangfire.IGlobalConfiguration'转换为'System.Action'
那么我如何添加我的配置呢?如果你想定义hangfire配置,你需要像这样添加它 您可以根据
Configuration.GetValue(“HangfireUseMemoryStorage”)
在Nuget上安装软件包,添加要在其上使用的存储的if/else
绞刑
Hangfire.SqlServer
Microsoft.Extensions.DependencyInjection
将以下代码添加到ConfigureServices部分
services.AddHangfire(configuration => configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage( //your Conectionstring,
new SqlServerStorageOptions { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, UseRecommendedIsolationLevel = true, DisableGlobalLocks = true }) );
确保正确填写ConctionString部分
将以下代码添加到配置部分
app.UseHangfireDashboard()
现在运行程序并在浏览器页面中输入/hangfire链接
例如localhost:1111/hangfire
在数据库中创建表后,您可以在此链接中看到仪表板,但在这种情况下,我必须复制其他设置。。。我建议检查第6.1.6节和第6.1.7节。在ASP.NET核心环境中,全局配置类隐藏在AddHangfire方法中
// Add Hangfire services.
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
}));
// Add the processing server as IHostedService
services.AddHangfireServer();
services.AddHangfire(configuration => configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage( //your Conectionstring,
new SqlServerStorageOptions { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, UseRecommendedIsolationLevel = true, DisableGlobalLocks = true }) );