You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用Npgsql连接PostgreSQL时遇SocketException连接被强制关闭

排查Npgsql连接PostgreSQL时的“连接被远程主机强制关闭”错误

针对你遇到的SocketException: An existing connection was forcibly closed by the remote host错误,可按以下步骤逐一排查:

  • 确认PostgreSQL服务状态
    检查本地PostgreSQL服务是否运行:Windows可在「服务」列表中查找postgresql-x64-[版本号],Linux/macOS用命令pg_ctl status。若服务未启动,手动启动后重试连接。

  • 补充连接字符串的端口参数
    你当前的连接字符串未显式指定端口,虽然PostgreSQL默认端口为5432,但为确保配置文件中的端口生效,建议补充端口配置:

    var connectionString = $"Host={cS.server};Port={cS.port};Username={cS.userID};Password={cS.password};Database={cS.database}";
    
  • 验证数据库及账号信息

    1. 确认Postgres2数据库存在:用pgAdmin登录postgres账号,查看数据库列表。
    2. 测试账号密码:用psql命令psql -U postgres -d Postgres2,输入密码admin验证是否能正常登录。
  • 检查端口占用与防火墙设置

    1. 用命令netstat -ano | findstr :5432检查5432端口是否被其他进程占用,若有则终止占用进程或修改PostgreSQL监听端口。
    2. 临时关闭本地防火墙,测试是否能正常连接,排除防火墙拦截的可能。
  • 调整PostgreSQL的监听与权限配置

    1. 打开PostgreSQL安装目录data文件夹下的postgresql.conf,确认listen_addresses设置为localhost或*,允许本地连接。
    2. 打开同目录下的pg_hba.conf,确认存在允许本地用户连接的规则,例如:
      host    all             all             127.0.0.1/32            scram-sha-256
      host    all             all             ::1/128                 scram-sha-256
      

    修改配置后需重启PostgreSQL服务。

  • 修复代码的潜在问题

    1. 替换async void为async Task,避免连接过程中的异常无法被捕获排查:
      async Task Start()
      {
          // 原有代码逻辑
      }
      
    2. 在解析配置后打印参数,确认ConnectionString.FromJson是否正确读取了配置内容:
      Console.WriteLine($"Server: {cS.server}, Port: {cS.port}, DB: {cS.database}, User: {cS.userID}");
      

内容的提问来源于stack exchange,提问作者Izzan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:35:20