如何创建从.NET服务到远程PostgreSQL服务器的连接

时间:2019-02-11 12:27:17

标签: c# postgresql ssh connection remote-connection

我无法使用某些连接字符串从C#.NET代码连接到远程PostgreSQL服务器。 (我的连接字符串包含基本信息,例如主机地址,端口,用户名,密码,数据库名称)。

我能够使用SSH隧道从PGAdmin 4连接到PostgreSQL服务器, 我有远程登录名(用户名和密码),端口(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 个答案:

答案 0 :(得分:0)

在我看来,您尝试连接的计算机可能已阻塞端口,请检查是否是这种情况。如果不是,则可以按照Npsql documentantion(https://www.npgsql.org/doc/index.html)上的语法检查字符串连接,如下所示:

var connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";

在这里您可以找到connection string parameters

答案 1 :(得分:0)

检查数据目录中的pg_hba.conf文件。这表明谁可以和不能连接到您的数据库。默认配置非常严格(警告方法有误)。

如果您信任网络中的所有计算机,只要它们具有用户ID /密码(认为带有防火墙的工作环境),则可以将以下内容添加到文件中:

host     all     all     0.0.0.0/0       md5

如果没有,请检查文档,甚至文件本身都能很好地解释各种选项。