#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 утра