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

.NET Core 3.1/5连接Snowflake超时但.NET Framework 4.7.2运行正常

问题描述

相同的Snowflake连接逻辑在.NET Framework 4.7.2环境下运行正常,但在.NET Core 3.1和.NET 5环境下无法连接,使用的Snowflake.Data版本为2.0.6。

代码示例
using (IDbConnection conn = new SnowflakeDbConnection())
{
    conn.ConnectionString =  "scheme=https;ACCOUNT=Test;HOST=Test.us-east-1.snowflakecomputing.com;port=443; ROLE=PSR_USER_POC_ROLE;WAREHOUSE=DEMO_WH; USER=PSR_USER; PASSWORD=PSR_USER;DB=UTIL_DB;SCHEMA=PSR_USER_POC";
    conn.Open();

    conn.Close();
}
错误日志
Snowflake.Data.Client.SnowflakeDbException: 'Snowflake Internal Error: Unable to connect. One or more errors occurred. (Request reach its timeout.)'

SnowflakeDbException: Request reach its timeout.

AggregateException: One or more errors occurred. (Request reach its timeout.)

可参考对应包的README.md文件中的示例开启日志用于问题排查。

解决方案
  • 修正连接字符串参数
    1. 移除参数前后多余空格:当前连接字符串中ROLE、USER等参数前带有空格,.NET Core下的参数解析逻辑对空格敏感度高于.NET Framework,会导致参数识别异常,需删除所有参数前后的空格
    2. 简化账户配置:同时填写ACCOUNT和HOST参数存在冗余,可直接将ACCOUNT参数改为Test.us-east-1,删除HOST参数即可,避免解析冲突
  • 显式指定TLS版本:Snowflake要求请求使用TLS 1.2及以上版本,.NET Core的默认TLS策略和.NET Framework存在差异,在打开连接前添加以下代码:
    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
  • 延长超时时间+开启会话保活:在连接字符串中添加两个参数CONNECTION_TIMEOUT=120;CLIENT_SESSION_KEEP_ALIVE=true;,避免首次握手时超时
  • 禁用不必要的代理检测:.NET Core默认会启用系统代理检测,无代理环境下该逻辑会拖慢请求甚至触发超时,在程序初始化阶段添加以下代码:
    System.Net.WebRequest.DefaultWebProxy = null;
    AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
    
  • 升级依赖包版本:Snowflake.Data 2.0.6是较早的版本,存在多个已知的.NET Core适配bug,升级到最新稳定版可直接解决大部分跨版本兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:42:03