Я работаю над основным приложением. NET внутри контейнера docker, оно имеет соединения с Redis и SQL Сервером. Redis работает отлично, но у меня проблемы с подключением к серверу SQL. Из VS, когда я запускаю свое приложение на IIS, оно может правильно открыть соединение, но когда я запускаю его как контейнер docker, метод connection.Open()
зависает бесконечно и никогда не достигает исключения. Я попытался изменить IP-адрес, чтобы соединение не установилось, и оно достигает и исключение (что заставляет меня думать, что оно может достичь сервера, но может подключиться).
Это удаленный сервер, поэтому я попытался подключиться с моего P C к Management Studio, и он работает. Я использую OrmLite для подключения, но я также пытался с SqlConnection
.
В настоящее время мой тестовый код выглядит примерно так:
// Testing telnet to ensure the container can reach server and port
TcpClient tc = null;
try
{
tc = new TcpClient("X.X.X.X", 1433);
string s = "";
// If we get here, port is open
}
catch (SocketException se)
{
string error = "";
// If we get here, port is not open, or host is not reachable
}
finally
{
if (tc != null)
{
tc.Close();
}
}
try
{
// Build connection string
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "X.X.X.X, 1433";
builder.UserID = "user";
builder.Password = "pass";
builder.InitialCatalog = "db";
// Connect to SQL
using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
{
connection.Open();
connection.Close();
return "ok";
}
}
catch (Exception e)
{
return "error";
}