У меня есть приложение, которое должно подключаться к SQL Server, работающему на удаленном сервере с использованием именованного экземпляра.
Используя IISExpress, я могу подключиться к SQL Server, но из Docker (контейнер Linux) это не удается- при доступе к контексту он просто зависает - не выдается исключение или сообщение об ошибке.Например,
var context = serviceScope.ServiceProvider.GetService<AppContext>();
context.Users.ToList();
В отладчике он никогда не достигает обработчика исключений.
Вместо этого я вижу много выводов, подобных этому:
The thread 125 has exited with code 0 (0x0).
The thread 164 has exited with code 0 (0x0).
The thread 0xa4 has exited with code 0 (0x0).
Использование node.js Iможет подключиться к SQL Server даже из докера без проблем.
Я могу подключиться к выпуску SQL Server Developer, работающему на той же машине, что и Docker, из ASP.NET Core в Docker, когда я использую, например, [ipaddress или host.docker.internal], 1433 - к сожалению, на удаленном SQLСервер, я не могу настроить фиксированный порт.
- работает с использованием IISExpress (работает на Windows)
- работает при подключении к SQL Server, работающему на компьютере разработчика, при использовании фиксированного портавместо именованного экземпляра (но я не могу изменить наш производственный сервер)
- работает при использовании node.js!из докера также с именованным экземпляром (оба: с именем хоста или IP-адресом - так что я могу разрешить удаленные имена, брандмауэр не является проблемой)
- пробовал ASP.NET Core 2.2 и 3.0preview5, используя контейнер Microsoft в качестве базы, напримерОТ mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
Соединительная строка:
"Data Source=remoteIP\\WEBDB;Initial Catalog=TestDB;User ID=testuser;Password=******;"
Также пробовал с "Интегрированная безопасность = False;"в строке подключения
Аутентификация сервера установлена на смешанную
Я могу воспроизвести это также без Entity Framework:
var conString = "Data Source=remoteIP\\WEBDB;Initial Catalog=TestDB;Integrated Security=False;User ID=testuser;Password=********";
using (SqlConnection conn = new SqlConnection(conString))
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Users", conn))
{
conn.Open();
var rows = cmd.ExecuteNonQuery();
Console.WriteLine($"rows: {rows}");
}
Он будет висеть на линии conn.Open();
.
Есть идеи, что я мог сделать?
Обновление:
- неправильно введена строка подключения.
- обновлен код с полным примером
Редактировать
Это работает:
var conString = "Data Source=10.0.75.1,1433;Initial Catalog=TestDB;Integrated Security=False;User ID=testuser;Password=********";
Это не работает:
var conString = "Data Source=10.0.75.1\\Developer;Initial Catalog=TestDB;Integrated Security=False;User ID=testuser;Password=********";
Я могу пропинговатьУдаленный IP-адрес, а также имя удаленного сервера.
К сожалению, установка mssql-cli на образ ubuntu не удалась из-за отсутствия зависимостей.