Ошибка при непрерывном подключении базы данных

Когда я запрашиваю базу данных в непрерывном цикле, через некоторое время я получаю сообщение об ошибке:

Было высказано исключение, которое, вероятно, связано с временным сбоем. Если вы подключаетесь к базе данных SQL Azure, рассмотрите возможность использования SqlAzureExecutionStrategy.

Обычно он работает нормально.

Ответы

Ответ 1

При подключении к базе данных SQL вам необходимо учитывать временные сбои подключения. Эти сбои подключения могут произойти, например, при обновлении обновлений, аппаратных сбоях и т.д. Ошибка, которую вы видите, указывает на то, что произошла одна из этих событий, которая была связана с отключением соединения. Включение стратегии исполнения, предложенной Anbuj, должно решить проблему.

Ответ 2

Если вы используете EF Core для повторной попытки при сбое для отказоустойчивых подключений:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer("your_connection_string", builder =>
        {
            builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null);
        });
    base.OnConfiguring(optionsBuilder);
}

Ответ 3

Включите стратегию исполнения, указанную здесь: https://msdn.microsoft.com/en-us/data/dn456835.aspx. При проектировании для Azure SQL DB вы должны проектировать для отказоустойчивых сбоев соединения, так как задние обновления, аппаратные сбои, балансировка нагрузки могут иногда приводить к прерывистым сбоям.

Ответ 4

Я получаю эту ошибку, когда логин, который я пытаюсь подключиться к базе данных, не имеет связанного пользователя в базе данных.

Ответ 5

Если ваша база данных является локальной, чтобы сказать WebAPI, иногда вы должны предоставить источник данных = localhost не IP-адрес. У нас есть ситуация, когда мы используем некоторые VPS и без установки источника данных на localhost дает эту ошибку. Итак, если кто-то еще испытал это, это могло бы помочь ему.

Ответ 6

Это может быть из-за настройки TLS. Framework.net 4.5 не поддерживает tls 1.2 по умолчанию, а новый SQL-db несовместим со старыми tls ver. поэтому отключите tls 1.0.1.1 на вашем компьютере или обновите до.net 4.6.2

Ответ 7

Решение этой проблемы заключается в предложенном ответе, используйте SetExecutionStrategy() чтобы включить политику SetExecutionStrategy() попыток. Также убедитесь, что он является производным от класса DbConfiguration чтобы Entity Framework мог выполнять метод автоматически.

Вы также хотите убедиться, что ваша отказоустойчивость соединения действительно работает путем настройки перехвата команд, который создает ошибки соединения, чтобы вы могли подтвердить, что он работает.

Подробнее о том, как обрабатывать временные ошибки соединения