我有一個服務結構服務(客戶可執行文件),使用entityframework核心,與sql azure交談。錯誤40和SqlAzureExecutionStrategy
不時我看到了以下錯誤:
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()))
一個主要的警告,是在我失去語境,所以我不知道什麼樣的數據正嘗試的那一刻要更新/插入,所以我不知道它是否最終成功。
幾個問題:
- 從Transient Detection Code它看起來並不像錯誤:40抓住了,但我的理解是錯誤40,實際上可能是另一個錯誤(不清楚)。那是對的嗎?
- 這真的是一個短暫的問題還是這意味着我有另一個問題?
- 沒有額外的日誌記錄(處理它),我們知道重試策略是否記錄錯誤,但是仍然重試並且實際上可能已經成功?
- 如果這是一個暫時性錯誤,但它沒有被捕獲到默認執行策略中,爲什麼不呢?子分類SqlAzureExecutionStrategy包含此錯誤會產生什麼樣的後果。
我已經看到了這個問題:Sql Connection Error 40 Under Load,而且感覺很熟悉,但他似乎通過調整他的數據庫已經解決了它 - 我將看看做什麼,我試圖讓我的代碼更具彈性數據庫問題的情況。