Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net core上添加带有自定义配置的Hangfire as服务_C#_Asp.net_Asp.net Core_.net Core_Hangfire - Fatal编程技术网

C# 如何在asp.net core上添加带有自定义配置的Hangfire as服务

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

我不想给hangfire添加一些配置。使用文档化的方式很容易,但有一个选项取决于用户设置,因此我不想这样做:

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 }) );