Невозможно подключиться к базе данных sql с помощью System.Data.SqlClient 4.4.3 и имени хоста, но ip работает - PullRequest
1 голос
/ 14 июля 2020

Я пробовал запустить это в приложении asp. net core 3.1 внутри контейнера docker на основе mcr.microsoft.com / dotnet / core / sdk: 3.1-bioni c ( Ubuntu 18.04). также пробовал с mcr.microsoft.com / dotnet / core / sdk: 3.1-buster.

Я пытаюсь подключиться к базе данных со следующим код:

using var connection = new SqlConnection(connectionString);
connection.Open();

Если я использую IP-адрес, он работает нормально. Если я запускаю это вне контейнера docker, он работает нормально. Если я запускаю в контейнере и использую System.Data.SqlClient 4.4.3 или выше и использую имя хоста, это приведет к ошибке со следующей ошибкой:

"Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or in stance-specific error 
occurred while establishing a connection to SQL Server. The server was not found or was not 
accessible. Verify that the instance name is correct and that SQL Server is configured to allow 
remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)" 

Моя первая хотя была эта Это была проблема с разрешением DNS, поэтому я попробовал Dns.GetHostAddresses("myhostname");, но он может определить правильный IP-адрес, так что это не похоже на проблему. Если я перейду на System.Data.SqlClient 4.4.2 , у моего приложения не возникнет проблем с подключением к серверу sql с именем хоста. Итак, какое изменение было внесено в 4.4.3, из-за которого у меня могут возникнуть эти проблемы? Я также могу упомянуть, что я пробовал использовать следующие библиотеки:

**Microsoft.Data.SqlClient v2.0.0**,  
**System.Data.SqlClient 4.8.1**,  
**Microsoft.EntityFameworkCore.SqlServer**.  

Та же проблема. Я пробовал использовать sqlCmd внутри контейнера docker, и у него нет проблем с подключением.

Я пробовал это с двумя разными базами данных, размещенными в разных местах, и заставить его работать с одной, но не с другой . Я подозреваю, что проблема заключается не в фактической версии программного обеспечения на хост-машине, а в публикации информации для полноты. Работает с именем хоста, только если я использую SqlCLient версии 4.4.2, ip можно использовать с 4.4.3 и выше.

l Microsoft SQL Server 2016 (SP2-GDR) (KB4532097) - 13.0.5102.14 (X64) 
Dec 31 2019 22:39:35 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> 
(Build 14393: ) (Hypervisor)

Работает с именем хоста независимо от версии SqlCLient

Microsoft SQL Server 2016 (SP2-GDR) (KB4532097) - 13.0.5102.14 (X64)
        Dec 31 2019 22:39:35
        Copyright (c) Microsoft Corporation
        Standard Edition (64-bit) on Windows Server 2012 R2 Datacenter 6.3 <X64>
 (Build 9600: ) (Hypervisor)

Даже Если какая-то сетевая конфигурация на стороне сервера может быть фактором, способствующим возникновению этой проблемы, остается один фактор: он работает с System.Data.SqlClient 4.4.2, но не работает с чем-либо выше этой версии. Очень хотелось бы понять, что происходит. Вот минимальный проект, который может воспроизвести проблему. Очень базовый c, поэтому я не думаю, что в моем коде есть прямая проблема. sql -test.zip

...