如何在执行C#Azure功能期间避免SqlClient超时错误?

时间:2018-04-02 11:44:54

标签: c# azure stored-procedures azure-functions azure-sql-server

我用C#创建了一个功能应用时间触发器。 在逻辑内部,我调用并执行我在SQL Server中创建的存储过程。

执行存储过程需要8分钟以上,我在Azure功能应用日志中遇到以下错误:

  

2018-04-02T11:03:46.409 [错误]执行功能时出现异常:   Functions.AbarIomWeeklyUsage。 mscorlib:抛出了异常   调用的目标。 .Net SqlClient数据提供程序:执行   超时已过期。完成之前已经过了超时时间   操作或服务器没有响应。等待操作   时间到。 2018-04-02T11:03:46.425 [错误]功能完成   (失败,Id = 1b85e7ef-ea52-4fd3-ab79-f27d188c5cac,持续时间= 30323ms)

到目前为止,我尝试了两件事: 1.利用应用程序连接字符串中的连接超时 2.在host.json

中添加超时

但是它仍然给我同样的错误30秒超时。

任何人都有相同的经验或解决方案吗?

2 个答案:

答案 0 :(得分:2)

您肯定超过了默认命令超时(默认为30秒)。如果您没有设置SqlCommand.CommandTimeout,您将收到SqlException。将代码中的命令的CommandTimeout(没有配置)设置为10分钟(600秒),与功能超时相同。

答案 1 :(得分:2)

以下是有关如何执行此操作的代码段:

using (SqlCommand cmd = new SqlCommand(text, conn))
{
        cmd.CommandTimeout = 60 * 60; // seconds
        cmd.Parameters.AddWithValue("@parameter1", myparameter1);

        // Execute the command and log the # rows affected.
        var rows = await cmd.ExecuteNonQueryAsync();

        log.Info($"{rows} rows were deleted");
}