如何创建从 .NET 服务到远程 PostgreSQL 服务器的连接
How to create a connection from .NET Service to Remote PostgreSQL server
我无法使用某些连接字符串从 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()
在我看来,您尝试连接的机器可能端口被阻塞了,请检查是否是这种情况。如果不是,那么您可以按照 Npsql 文档 (https://www.npgsql.org/doc/index.html) 上的语法检查您的字符串连接,它如下所示:
var connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
在这里您可以找到 connection string parameters。
检查数据目录中的 pg_hba.conf 文件。这表明谁可以和不能连接到您的数据库。默认配置非常严格(我认为是谨慎的错误)。
如果您信任网络中的所有机器,前提是它们有 userid/password(想想带有防火墙的工作环境),您可以在文件中添加如下内容:
host all all 0.0.0.0/0 md5
如果没有,请查看文档,甚至文件本身也很好地解释了各种选项。
我无法使用某些连接字符串从 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()
在我看来,您尝试连接的机器可能端口被阻塞了,请检查是否是这种情况。如果不是,那么您可以按照 Npsql 文档 (https://www.npgsql.org/doc/index.html) 上的语法检查您的字符串连接,它如下所示:
var connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
在这里您可以找到 connection string parameters。
检查数据目录中的 pg_hba.conf 文件。这表明谁可以和不能连接到您的数据库。默认配置非常严格(我认为是谨慎的错误)。
如果您信任网络中的所有机器,前提是它们有 userid/password(想想带有防火墙的工作环境),您可以在文件中添加如下内容:
host all all 0.0.0.0/0 md5
如果没有,请查看文档,甚至文件本身也很好地解释了各种选项。