Как создать соединение от.NET Service к удаленному серверу PostgreSQL
Я не могу подключиться к удаленному серверу PostgreSQL из кода C# .NET с помощью какой-либо строки подключения. (Моя строка подключения содержит основную информацию, такую как адрес хоста, порт, имя пользователя, пароль, имя базы данных).
Я могу подключиться к серверу PostgreSQL из PGAdmin 4, используя SSH Tunnel, у меня есть Удаленный вход (имя пользователя и пароль), порт (22) и закрытый ключ RSA.
Моя строка подключения:Server=HOST_ADDRESS;Port=HOST_PORT;User Id=POSTGRES_USERNAME;Password=POSTGRES_PASSWORD;Database=POSTGRES_DATABASE_NAME;
Примечание: я использую Npgsql
Сборка.NET
И ошибка, которую я получаю:
No connection could be made because the target machine actively refused it
Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
at Npgsql.NpgsqlConnector.<RawOpen>d__153.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlConnector.<Open>d__149.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.ConnectorPool.<AllocateLong>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlConnection.Open()
2 ответа
Проверьте файл pg_hba.conf в вашем каталоге данных. Это указывает, кто может и не может подключиться к вашей базе данных. Конфигурация по умолчанию является довольно строгой (ошибки на стороне предостережения).
Если вы доверяете всем машинам в вашей сети, при условии, что у них есть ИД пользователя / пароль (например, рабочая среда с брандмауэром), вы можете добавить что-то вроде этого в файл:
host all all 0.0.0.0/0 md5
Если нет, проверьте документы или даже сам файл, который хорошо объясняет различные варианты.
Мне кажется, что компьютер, к которому вы пытаетесь подключиться, может заблокировать порт, пожалуйста, проверьте, так ли это. если это не так, тогда вы можете проверить ваше строковое соединение, следуя синтаксису, указанному в документе Npsql ( https://www.npgsql.org/doc/index.html), он выполняется следующим образом:
var connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
Здесь вы можете найти параметры строки подключения.