0

我有一个 Azure 时间戳 Web 应用程序使用混合连接连接到大约 50 个不同的客户本地 SQL 数据库。Web 应用程序是使用 EF 的基于 Asp.Net Core 2.2 的 C# 应用程序。该应用程序在 2 年多来一直运行良好,没有任何错误,但最近一周 SQL 连接在两个不同的时间停止工作。它们将在重新启动 Web 应用程序后立即启动。这对于需要 24/7 全天候工作的客户来说当然是非常糟糕的。Azure 失败消息表明打开 SQL 连接时出现问题,该问题会随着时间的推移出现并通过重新启动 Web 进行重置。

在 Azure 中研究 SQL 失败时,在尝试打开连接时都会给出相同的错误号 10013:

System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP 提供者,错误:0 - 尝试以访问权限禁止的方式访问套接字。错误号:10013,状态:0,类:20

当更仔细地检查故障时,发现第一个故障以如下 (5-8) 的大量 64 数字错误开始,之后所有连接的后续错误都是 10013 类型。

System.Data.SqlClient.SqlException (0x80131904):与服务器建立连接成功,但在登录前握手过程中发生错误。(提供者:TCP 提供者,错误:0 - 指定的网络名称不再可用。错误号:64,状态:0,类:20

我的想法是:这可能是因为使用 EnableRetryOnFailure 作为 sqlOption,并且由于某种原因,如果单个连接工作不正常,这将阻塞所有 SqlOpen 尝试。网络应用程序中使用的代码:

  DbContextOptions dbConnOptions = SqlServerDbContextOptionsExtensions
    .UseSqlServer(new DbContextOptionsBuilder(), dbConnectionString,
    sqlServerOptionsAction: sqlOptions =>
    {
      sqlOptions.EnableRetryOnFailure(
      maxRetryCount: 10,
      maxRetryDelay: TimeSpan.FromSeconds(30),
      errorNumbersToAdd: null);
    }).Options;

这可能是我的 SQL 连接问题的原因吗?让删除 EnableRetryOnFailure 代码会更好吗?或者是否有完全其他的解决方案来解决这个问题?

Bengt Bredenberg, Premisol Oy, 赫尔辛基, 芬兰

4

0 回答 0