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

Azure SQL AD Default认证连接报A task was canceled错误

问题产生原因

从异常堆栈的内层错误可以定位到,故障点出在Azure.Identity.VisualStudioCredential.RunProcessesAsync环节,核心原因是当前使用的Microsoft.Data.SqlClient 4.1.0存在已知兼容问题:

  • 4.1.0版本内部绑定的Azure.Identity为1.4.x旧版本,该版本通过子进程调用Visual Studio本地认证服务获取令牌时,在Azure Function调试的同步上下文场景下极易触发通信超时,直接抛出TaskCanceledException
  • 旧版SqlClient的Active Directory Default认证逻辑没有完善的凭据源降级机制,一旦Visual Studio凭据获取失败,不会自动尝试Azure CLI、托管标识等其他可用凭据源,直接终止连接流程
  • 手动引用DefaultAzureCredential附加令牌能正常运行,是因为项目中直接引用的Azure.Identity版本更高,修复了Visual Studio凭据的超时bug,同时凭据降级逻辑正常。
排查与解决方案

按优先级从高到低尝试以下操作:

  • 升级Microsoft.Data.SqlClient到5.1.1及以上的稳定版本。5.x版本更新了内置依赖的Azure.Identity版本,修复了Visual Studio凭据的进程通信超时问题,同时优化了Active Directory Default模式下的凭据源fallback逻辑,不会因为单个凭据源获取失败就直接抛出异常。
  • 若暂时无法升级SqlClient版本,可在应用启动阶段手动覆盖SqlClient的默认认证提供器,强制使用项目中引用的新版Azure.Identity实例获取令牌,代码如下:
using Microsoft.Data.SqlClient;
using Azure.Identity;

// 放在Function启动配置的最前面执行即可
SqlAuthenticationProvider.SetProvider(
    SqlAuthenticationMethod.ActiveDirectoryDefault,
    new ActiveDirectoryAuthenticationProvider(new DefaultAzureCredential()));

该配置生效后,连接字符串中Authentication=Active Directory Default的逻辑会和手动附加令牌的逻辑完全一致,绕开内置旧版依赖的bug。

  • 校验本地Visual Studio认证状态:打开Visual Studio菜单栏「工具」-「选项」-「Azure 服务认证」,确认当前选中的账号拥有目标Azure SQL数据库的对应访问权限,重新执行账号登录操作,清除本地过期的认证缓存。
  • 排除Visual Studio凭据源干扰:添加系统环境变量AZURE_TOKEN_CREDENTIALS_EXCLUDE_VISUALSTUDIO_CREDENTIAL=true,重启Visual Studio后重新调试,此时Default认证模式会跳过Visual Studio凭据源,依次尝试Azure CLI、Visual Studio Code登录凭据等其他可用认证通道,可快速定位是否为Visual Studio本地认证组件本身的故障。

注意:旧版Microsoft.Data.SqlClient的令牌获取超时为内部硬编码值,修改连接字符串中的连接超时参数不会对令牌获取环节生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:57:23