У меня есть изолированное приложение-функция 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?
Возможно, кто-то, кто сталкивался с этим или имеет опыт работы с SQL или сетями, сможет указать мне направление, или я смогу использовать полученную информацию, чтобы помочь мне указать этим командам правильное направление.
Все, что я ищу, это направление, связано ли оно с SQL, связано ли оно с сетями...
не могли бы вы предоставить строку подключения, которую вы использовали?
Я использую аутентификацию SQL Server=tcp:servername.database.windows.net,1433;Initial Catalog=databaseName;Persist Security Info=False;User ID=username;Password = {your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30; Очевидно, удаляю имена





Это проблема с базой данных, работой сети или кодом?
Проблема в настройке Newtwork:
Соединение с сервером было успешно установлено, но во время рукопожатия перед входом произошла ошибка. (поставщик: 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».
Как именно, по вашему мнению, мы можем вам помочь? У вас такое сообщение "Сервер не найден или недоступен" и сетевая команда.... Как это может быть из кода, если вы смогли подключиться к новому созданному экземпляру?