1

我有一个运行hangfire 1.7.2 的.net 核心应用程序。

所以我有这个工作,它执行 SQL 存储过程,它是一个长时间运行的任务,可能需要 30 分钟。

这给了我以下错误:超时已过期。在操作完成之前超时时间已过或服务器没有响应。该语句已终止。

services.AddHangfire(configuration => 

configuration.UseSqlServerStorage(Configuration.GetConnectionString("HangfireConnection"), 
new SqlServerStorageOptions
    {
        SlidingInvisibilityTimeout = TimeSpan.FromMinutes(30),
        QueuePollInterval = TimeSpan.Zero,
        UsePageLocksOnDequeue = false,
        DisableGlobalLocks = false
    }));

请帮帮我。

4

2 回答 2

3

上的CommandTimeout属性SqlServerStorageOptions应该是您正在寻找的。

将此时间增加到 30 分钟以上,您的作业将停止超时。

(见源码https://github.com/HangfireIO/Hangfire/blob/cf7bb08d24ee4953926b7717461bf8a23d895eb4/src/Hangfire.SqlServer/SqlServerConnection.cs

于 2019-11-12T22:01:03.477 回答
3

我设法通过增加默认为 30 秒的SQLCommand超时来解决此问题。

 using (SqlCommand cmd = new SqlCommand(query, con))
 {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandTimeout = 3600; // 1 hour
        await cmd.ExecuteNonQueryAsync();
 }
于 2019-11-15T08:00:54.353 回答