Не удается подключиться к серверу Postgresql 13 с помощью Npgsql, конечный компьютер активно запрещает соединение

#c# #wpf #npgsql

#c# #wpf #npgsql

Вопрос:

В моем приложении, когда я нажимаю кнопку

 <Button x:Name="SQLconnectionButtonTest" Content="Test SQL connection" VerticalAlignment="Top" HorizontalAlignment="Left" Click="SQLconnectionButtonTest_Click"></Button>
  

и код:

 public void SQLconnectionButtonTest_Click(object sender, RoutedEventArgs e)
    {
    var cs = "Host=localhost;Username=postgres;Password=postgres123;Database=testdb";
    using var con = new NpgsqlConnection(cs);
    con.Open();
    var sql = "SELECT version()";
    using var cmd = new NpgsqlCommand(sql, con);
    var version = cmd.ExecuteScalar().ToString();
    MessageBox.Show($"Postgres version: {version}");
}
  

У меня ошибка:
System.Net.Sockets.Исключение SocketException:
На английском языке было бы «не удается установить соединение, поскольку конечный компьютер активно отказывается от него.
Сервер Postgresql запущен, я создал базу данных testdb в pgadmin

Комментарии:

1. И вы можете подключить к нему какой-либо другой инструмент запроса, используя ту же строку подключения?

2. у меня есть только это

3. Хорошо, так как насчет установки и попытки что-то еще? Также прочитал thegeekstuff.com/2014/02/enable-remote-postgresql-connection и проверьте, что ваш pg разрешает подключения к локальному хостингу.

4. я прочитал это, я удалил postgresql 13 и установил 9.6. К обоим я могу подключиться из командной строки, используя psql -h localhost -p 5435 -U postgres. Или со второго компьютера psql -h 192.168.0.120 -p 5435 -U postgres. Но я все равно не могу подключиться из приложения

5. В этих командных строках указан порт как 5435, но по умолчанию используется порт 5432. В опубликованной вами строке подключения не указано Port=5435

Ответ №1:

Из комментариев кажется, что, возможно, ваш PG работал на нестандартном порту, и требуемая спецификация номера порта отсутствовала в строке подключения. Вы отметили, что существует разница в поведении между PG 13 и PG9.6; с этой целью я бы посоветовал использовать что-то вроде TCPView, чтобы проверить, какой порт и интерфейс прослушивает PG, и убедиться, что данные строки подключения совпадают. Также проверьте, работает ли ваш брандмауэр Windows в режиме, в котором запущенное приложение влияет на то, разрешено ли соединение или нет, а не только на порт