【问题标题】:SnowflakeDbConnection Open(): Randomly fails after upgrade to .NET Standard 2.1SnowflakeDbConnection Open():升级到 .NET Standard 2.1 后随机失败
【发布时间】:2019-11-06 01:14:17
【问题描述】:

我将具有 .NET Core 2.2.NET Standard 2.0 的项目的解决方案升级到 .NET Core 3.0 .NET Standard 2.1

在使用 .NET Standard 框架构建的项目中,有一行代码提出了以前没有的问题

private _connectionString = " stuff here ";

public List<Character> GetAll(int take, int skip, string orderBy, string sortOrder)
{   
    ...
    using (IDbConnection conn = new SnowflakeDbConnection())
    {

        conn.ConnectionString = _connectionString;

        if (conn != null && conn.State == ConnectionState.Closed)
            conn.Close();

        try {
            conn.Open();
        }
        catch(Exception ex)
        {
            throw ex;
        }
    ...
}

当代码到达conn.Open()时,它只是挂起直到最终返回

TaskCanceledException:任务被取消。

它没有提供更多信息。奇怪的是,第一次调用此方法时,它实际上工作得很好。然后我刷新了页面,从那以后它就坏了。直到我坐了一段时间,它又返回了正确的数据——然后在刷新或解决方案的另一个构建时随机中断。

我怀疑框架的升级只是巧合,这更有可能是连接源服务器/数据库的问题?


更新:在 Snowflake 上运行 SYSTEM$WHITELIST(),复制 json 结果并将其保存到名为 whitelist.json 的文件中后,我在本地计算机上运行了以下命令:

snowcd .\whitelist.json
Performing 33 checks for 13 hosts
All checks passed

【问题讨论】:

标签: c# .net-core .net-standard snowflake-cloud-data-platform


【解决方案1】:

您可以在连接字符串主机条目上添加帐户名称,如下所示:

conn.ConnectionString = "account =accountName;
host=accountName.region.azure.snowflakecomputing.com;User=userName;
password=password;db=dBName;schema=scehmaName;";

在代码中添加 log4Net,这样您将获得详细的雪花异常,以便您轻松识别实际原因。

【讨论】:

  • 这为我解决了这个问题,这很有意义。我当前的雪花主机是“.us-east-1.snowflakecomputing.com”。文档说如果没有指定主机,它会尝试使用“.snowflakecomputing.com”,这是不正确的。 github.com/snowflakedb/snowflake-connector-net
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 2012-08-15
  • 2022-09-30
  • 2022-06-27
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多