Гибридное подключение Azure SQL-соединение перестает работать. Помогает перезапуск веб-приложения. Проблема с отключением электронной почты?

#sql-server #asp.net-core #sqlconnection #azure-hybrid-connections

Вопрос:

У меня есть веб-приложение Azure с отметкой времени, подключающееся примерно к 50 различным клиентам в локальных базах данных SQL с использованием гибридного подключения. Веб-приложение является Asp.Net Приложение C# на основе ядра 2.2 с использованием EF. Приложение работает очень хорошо в течение 2 лет без каких-либо ошибок, но на прошлой неделе соединения SQL в течение двух разных периодов перестали работать. Они запустятся сразу после перезапуска веб-приложения. Это, конечно, крайне плохо для моих клиентов, которым нужна работа 24/7. Сообщения об ошибках Azure указывают на проблему с открытием подключения SQL, которая возникает со временем и сбрасывается при перезапуске веб-сервера.

При изучении сбоев SQL в Azure все выдает один и тот же номер ошибки 10013 при попытке открыть соединение:

System.Data.SqlClient.SQLException (0x80131904): При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не был найден или был недоступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. (поставщик: Поставщик TCP, ошибка: 0 — Была предпринята попытка получить доступ к сокету способом, запрещенным его правами доступа. Номер ошибки:10013,Состояние:0,Класс:20

При более тщательном изучении сбоев выясняется, что первый сбой начинается с большого количества ошибок с 64 номерами, как показано ниже (5-8), после чего последующие ошибки имеют тип 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?
Или может быть совершенно другое решение этой проблемы?

Бенгт Бреденберг, Premisol Oy, Хельсинки, Финляндия

Комментарии:

1. Привет @user2302851 , я столкнулся с той же проблемой. После перезапуска службы приложений с портала Azure она снова работает нормально. Постоянно сталкиваюсь с этой проблемой через несколько дней. Вы нашли какое-нибудь решение для этого?

2. Что я сделал тогда в марте, так это заменил приведенную выше команду следующими DbContextOptions dbConnOptions = SqlServerDbContextOptionsExtensions. UseSqlServer (новый DbContextOptionsBuilder(), esmikkoConnectionString). Параметры; т. е. удаление части RetryOnFailure и sofar такого же типа ошибки не произошло. Также возникли некоторые другие ошибки при остановке веб-приложения, поэтому я также внес следующие изменения в веб-приложение. — Удалены все дополнительные входы в Web.config (stdoutLogEnabled=»false») — Автоматически перезапускайте веб-приложение раз в неделю в воскресенье вечером в 3:00 утра