错误40和SqlAzureExecutionStrategy

时间:2017-04-03 20:04:26

标签: azure-sql-database entity-framework-core

我有一个服务结构服务(来宾可执行文件),使用entityframework核心,与sql azure交谈。

我不时会看到以下错误:

A network-related or instance-specific error occurred while establishing a connection 
to SQL Server. The server was not found or was not accessible. Verify that the 
instance name is correct and that SQL Server is configured to allow remote connections.
(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

似乎是瞬态的,因为有大量数据库事务没有错误发生。当节点忙时,这似乎更多。

我在启动时添加了代码,设置了EnableRetryOnFailure来设置SqlServerRetryingExecutionStrategy:

services.AddEntityFrameworkSqlServer()
        .AddDbContext<MyDbContext>(options => 
            options.UseSqlServer(_configuration.GetConnectionString("MyDbConnection"),
            o => o.EnableRetryOnFailure()))

一个主要的警告是,目前我正在失去上下文,因此我不知道哪些数据正在尝试更新/插入,所以我不知道它是否最终成功。

几个问题:

  1. Transient Detection Code它看起来不像错误:40被捕获,但我的理解是错误40实际上可能是另一个错误(不清楚)。这是对的吗?
  2. 这真的是一个短暂的问题还是意味着我还有其他问题?
  3. 如果没有额外的日志记录(处理它),我们是否知道重试策略是否记录了错误,但仍然重试并且实际上可能已成功?
  4. 如果这是一个瞬态错误,但它没有在默认执行策略中捕获,为什么不呢?以及对SqlAzureExecutionStrategy进行子类化以包含此错误会产生什么样的无意义后果。
  5. 我已经看到了这个问题:Sql Connection Error 40 Under Load,它感觉很熟悉,但他似乎已经通过调整他的数据库来解决它 - 我将会看到这样做,我正在努力使我的代码更具弹性在数据库问题的情况下。

1 个答案:

答案 0 :(得分:0)