You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Function访问Azure SQL数据库遇瞬态错误及超时问题

问题描述

尝试从同一Azure账号下的Function App访问Azure托管数据库时,遇到以下错误:

已引发可能由瞬态故障导致的异常。请考虑在UseSqlServer调用中添加'EnableRetryOnFailure'以启用瞬态错误恢复。

添加EnableRetryOnFailure后,最终返回超时错误。

program.cs中的核心代码如下:

string connectionString = Environment.GetEnvironmentVariable("DefaultConnection");

services.AddDbContext<VladbContext>(options => options.UseSqlServer(connectionString), ServiceLifetime.Transient);

技术栈:.NET 7 + Entity Framework Core,EF Core代码与Blazor应用共享(Blazor应用运行完全正常),Function本地连接本地数据库时也能正常工作。


更新1:初始日志错误信息

"Exception: System.AggregateException: 发生一个或多个错误。
(重试4次后失败。可在ClientOptions.Retry中调整重试设置,或通过在ClientOptions.RetryPolicy中配置自定义重试策略。 (连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。 (ourserver.vault.azure.net:443)) (连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。 (ourserver.vault.azure.net:443)) (连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。 (ourserver.vault.azure.net:443)) (连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。 (ourserver.vault.azure.net:443)))"


更新2:配置SQL Server访问密钥保管库后的错误

2023-12-28T14:26:58.830 [Error] 使用与服务器tcp:ourSQLserver.database.windows.net,1433上的数据库'ourSQLdB'的连接时发生错误。
2023-12-28T14:26:58.892 [Error] 遍历上下文类型App.DataService.Models.VladbContext的查询结果时发生异常。
System.InvalidOperationException: 引发了可能由瞬态故障导致的异常。考虑通过在'UseSqlServer'调用中添加'EnableRetryOnFailure'来启用瞬态错误恢复。
---> Microsoft.Data.SqlClient.SqlException (0x80131904): 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(provider: TCP Provider, error: 0 - 连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。)
---> System.ComponentModel.Win32Exception (10060): 连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。 at
Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection, Action`1 wrapCloseInAction)


解决方案
  • 检查SQL Server防火墙规则:
    • 将Function App的所有出站IP地址(含VIP)添加到SQL Server防火墙允许列表;若使用消费计划,直接启用“允许Azure服务和资源访问此服务器”选项。
  • 验证连接字符串配置:
    • 确认DefaultConnection中的服务器地址格式为tcp:xxx.database.windows.net,1433,数据库名、身份验证信息无误;若连接字符串存储在密钥保管库,需为Function App配置系统托管标识,并在密钥保管库访问策略中添加该标识的“机密读取”权限。
  • 优化EF Core连接配置:
    调整UseSqlServer的重试与超时参数:
    services.AddDbContext<VladbContext>(options => 
        options.UseSqlServer(connectionString, sqlOptions => 
        {
            sqlOptions.EnableRetryOnFailure(5, TimeSpan.FromSeconds(30), null);
            sqlOptions.CommandTimeout(60); // 延长命令超时时间
        }), ServiceLifetime.Transient);
    
  • 排查Function App网络限制:
    • 若启用虚拟网络集成,确认虚拟网络与SQL Server的对等连接配置正确,或SQL Server防火墙允许该虚拟网络的流量;
    • 检查网络安全组(NSG)规则,确保未限制Function App访问SQL Server的1433端口和密钥保管库的443端口。

内容的提问来源于stack exchange,提问作者coolblue2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:00:43