diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SNI/SNIProxy.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SNI/SNIProxy.cs index ca5587c098..ac4d3599dd 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SNI/SNIProxy.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SNI/SNIProxy.cs @@ -579,10 +579,12 @@ internal static DataSource ParseServerName(string dataSource) private void InferLocalServerName() { // If Server name is empty or localhost, then use "localhost" - if (string.IsNullOrEmpty(ServerName) || IsLocalHost(ServerName)) + if (string.IsNullOrEmpty(ServerName) || IsLocalHost(ServerName) || + (Environment.MachineName.Equals(ServerName, StringComparison.CurrentCultureIgnoreCase) && + _connectionProtocol == Protocol.Admin)) { - ServerName = _connectionProtocol == Protocol.Admin ? - Environment.MachineName : DefaultHostName; + // For DAC use "localhost" instead of the server name. + ServerName = DefaultHostName; } } diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs index 08113cbd3a..489a414ce9 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs @@ -457,5 +457,41 @@ public static void ConnectionAliasTest() key.DeleteValue(b.DataSource); } } + + private static bool CanUseDacConnection() + { + if (!DataTestUtility.IsTCPConnStringSetup()) + { + return false; + } + + SqlConnectionStringBuilder b = new(DataTestUtility.TCPConnectionString); + if (!DataTestUtility.ParseDataSource(b.DataSource, out string hostname, out int port, out string instanceName)) + { + return false; + } + + if ("localhost".Equals(hostname.ToLower()) && (port.Equals(-1) || port.Equals(1433)) && + string.IsNullOrEmpty(instanceName) && b.UserID != null && b.UserID.ToLower().Equals("sa")) + { + return true; + } + + return false; + } + + [ConditionalFact(nameof(CanUseDacConnection))] + public static void DacConnectionTest() + { + if (!CanUseDacConnection()) + { + throw new Exception("Unable to use a DAC connection in this environment. Localhost + sa credentials required."); + } + + SqlConnectionStringBuilder b = new(DataTestUtility.TCPConnectionString); + b.DataSource = "admin:localhost"; + using SqlConnection sqlConnection = new(b.ConnectionString); + sqlConnection.Open(); + } } } diff --git a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Microsoft.Data.SqlClient.TestUtilities.csproj b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Microsoft.Data.SqlClient.TestUtilities.csproj index 087d348c82..3bd48830cc 100644 --- a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Microsoft.Data.SqlClient.TestUtilities.csproj +++ b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Microsoft.Data.SqlClient.TestUtilities.csproj @@ -8,10 +8,9 @@ - + PreserveNewest - config.json - + \ No newline at end of file