Попытка подключиться к базе данных SQL — поставщик: поставщик TCP, ошибка: 26 — ошибка при обнаружении указанного сервера/экземпляра

У меня есть изолированное приложение-функция Azure C# .NET 8, которое я пытаюсь подключить к базе данных SQL, но у меня возникли проблемы с поиском проблемы.

SqlException: При установке соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и что SQL Server настроен на разрешение удаленных подключений. (поставщик: поставщик TCP, ошибка: 26 — указана ошибка при обнаружении сервера/экземпляра)

У нас есть разные команды: я в команде разработчиков, есть сетевая команда и команда SQL. Я пытаюсь определить, в чем может заключаться проблема.

Функция пытается подключиться к SQL напрямую, используя как управляемое удостоверение, так и прямое имя пользователя и пароль, но безуспешно. Из приложения-функции на сервер Azure MS SQL не предоставляется доступ и он находится за виртуальными сетями и частными конечными точками. Кажется, они настроены правильно с сетевой стороны, поскольку я могу определить адрес и порт сервера.

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

try
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        await connection.OpenAsync();
        _logger.LogInformation("Successfully connected to SQL Server.");
    }

    return new OkObjectResult("Successfully connected to SQL Server.");
}
catch (SqlException ex)
{
    var result = JsonConvert.SerializeObject(new
    {
        Message = $"SqlException: {ex.Message}",
        ex.StackTrace,
        ex.InnerException,
        ex.Source
    });

    _logger.LogError(ex, ex.Message);
    return new ObjectResult(result) { StatusCode = StatusCodes.Status503ServiceUnavailable };
}
catch (Exception ex)
{
    var result = JsonConvert.SerializeObject(new
    {
        Message = $"Exception: {ex.Message}",
        ex.StackTrace,
        ex.InnerException,
        ex.Source
    });

    _logger.LogError(ex, ex.Message);
    return new ObjectResult(result) { StatusCode = StatusCodes.Status503ServiceUnavailable };
}

Это проблема с базой данных, работой сети или кодом?

Я попробовал tcpping через Kudu в приложении-функции Azure, и он может разрешить ошибку .database.windows.net 1433.

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

Я также пробовал разные строки подключения.

Обновлено:

Дополнительная информация об этой функции: она использует план приложения для Linux.

Я обновил строку подключения, чтобы использовать IP-адрес вместо имени сервера, и получил подобную ошибку:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 35 - An internal exception was caught)

После еще некоторого чтения это указало мне на проблемы TLS/SSL. Поэтому я добавил эту функцию в док-контейнер Linux локально, и теперь получаю ту же ошибку при попытке подключения к одному SQL-серверу. Но когда я снова подключаюсь к созданному мной базовому, он работает. Какую конфигурацию SQL мне не хватает и почему она связана с образом Linux?

Как именно, по вашему мнению, мы можем вам помочь? У вас такое сообщение "Сервер не найден или недоступен" и сетевая команда.... Как это может быть из кода, если вы смогли подключиться к новому созданному экземпляру?

D A 19.07.2024 12:31

Возможно, кто-то, кто сталкивался с этим или имеет опыт работы с SQL или сетями, сможет указать мне направление, или я смогу использовать полученную информацию, чтобы помочь мне указать этим командам правильное направление.

Garran Michaels 19.07.2024 13:03

Все, что я ищу, это направление, связано ли оно с SQL, связано ли оно с сетями...

Garran Michaels 19.07.2024 13:04

не могли бы вы предоставить строку подключения, которую вы использовали?

Bhavani 19.07.2024 13:05

Я использую аутентификацию SQL Server=tcp:servername.database.windows.net,1433;Initial Catalog=databaseName;Persist Security Info=False;User ID=username;Password = {your_password};MultipleActiveResultSet‌​s=False;Encrypt=True‌​;TrustServerCertific‌​ate=False;Connection Timeout=30; Очевидно, удаляю имена

Garran Michaels 19.07.2024 13:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это проблема с базой данных, работой сети или кодом?

Проблема в настройке Newtwork:

  • Проверьте, не ограничивают ли какие-либо правила группы безопасности сети подключение к SQL Server.
  • Убедитесь, что настройки брандмауэра для SQL Server разрешают подключения из диапазона IP-адресов вашего приложения-функции Azure. Кроме того, вы можете подключить SQL Server из своей аренды Azure, выбрав параметр «Разрешить все службы Azure».
  • Убедитесь, что конфигурация частной конечной точки правильна, если у вас интегрирована виртуальная сеть, а разрешение DNS правильно настроено для частной конечной точки.

Соединение с сервером было успешно установлено, но во время рукопожатия перед входом произошла ошибка. (поставщик: TCP-провайдер, ошибка: 35 — обнаружено внутреннее исключение)

Чтобы устранить вышеуказанную ошибку, добавьте Encrypt=false; элемент в строку подключения. как показано ниже:

Server=tcp:servername.database.windows.net,1433;Initial Catalog=databaseName;Persist Security Info=False;User ID=username;Password = {your_password};MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=30;
Ответ принят как подходящий

Мы нашли этот пост Невозможно подключить функцию Azure к Azure SQL с помощью частной конечной точки

По сути, мне нужно добавить два параметра приложения, поскольку мы используем виртуальную сеть и частную конечную точку:

WEBSITE_DNS_SERVER with value 168.63.129.16 
WEBSITE_VNET_ROUTE_ALL with value 1

Из вышеупомянутого поста: «Эти параметры будут отправлять все исходящие вызовы из вашего приложения в вашу виртуальную сеть, а также позволят вашему приложению использовать частные зоны Azure DNS».

Другие вопросы по теме