C# postgres连接上的System.Net.Sockets.SocketException

C# postgres连接上的System.Net.Sockets.SocketException,c#,postgresql,xamarin.forms,socketexception,C#,Postgresql,Xamarin.forms,Socketexception,我有一个连接到Postgres DB的应用程序。我有我的连接功能,但每次我尝试连接到数据库时,都会出现异常: {System.Net.Sockets.SocketException 0x80004005:在C:\projects\Npgsql\src\Npgsql\NpgsqlConnector.cs:733 at Npgsql.NpgsqlConnector+d_153.MoveNext[0x005a0]中的Npgsql.NpgsqlConnector.Connect Npgsql.Npgsq

我有一个连接到Postgres DB的应用程序。我有我的连接功能,但每次我尝试连接到数据库时,都会出现异常:

{System.Net.Sockets.SocketException 0x80004005:在C:\projects\Npgsql\src\Npgsql\NpgsqlConnector.cs:733 at Npgsql.NpgsqlConnector+d_153.MoveNext[0x005a0]中的Npgsql.NpgsqlConnector.Connect Npgsql.NpgsqlConnector.NpgsqlTimeout超时[0x001f5]被拒绝在C:\projects\npgsql\src\npgsql\NpgsqlConnector.cs中:648从引发异常的前一个位置开始的堆栈结束跟踪-在C:\projects\npgsql\src\npgsql\NpgsqlConnector.cs中的npgsql.NpgsqlConnector+d_u149.MoveNext[0x003e1]中:从引发异常的前一个位置开始的455堆栈结束跟踪-在npgsql.ConnectorPool+d_u19.MoveNext[0x001cf]在C:\projects\npgsql\src\npgsql\ConnectorPool.cs中:从引发异常的上一个位置开始的300堆栈结束跟踪-在System.Threading.Tasks.ValueTask1[TResult]。在以下位置获取[0x00022]结果:0在System.Runtime.CompilerServices.ValueTaskWaiter1[TResult]。GetResult[0x00000]在c:\projects\Npgsql\src\Npgsql\NpgsqlConnection.cs:331在App1.MainPage.conexao[0x00054]的Npgsql.NpgsqlConnection.NpgsqlConnection.NpgsqlConnection.Open[0x00000]处引发异常的上一个位置的堆栈结束跟踪在c:\projects\Npgsql\src\Npgsql\Npgsql\Npgsql\Npgsql\NpgsqlConnection.cs:153处在C:\Users\Mario\Documents\projetos\App1\App1\App1\MainPage.xaml.cs:40}

以下是我尝试使用的代码:

   private void conexao()
    {
        NpgsqlConnection pgsqlConnection = null;
        var connString = string.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};",
                                             serverName, port, userName, password, databaseName);
        DataTable dt = new DataTable();

        try
        {
            using (pgsqlConnection = new NpgsqlConnection(connString))
            {
                usuario usuario = new usuario();
                // abre a conexão com o PgSQL e define a instrução SQL
                pgsqlConnection.Open();
                string cmdSeleciona = "Select * from funcionarios order by id_funcionario";
                List<string> lista = new List<string>();
                NpgsqlCommand cmd = new NpgsqlCommand(cmdSeleciona, pgsqlConnection);
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    usuario.nome_funcionario = reader["nome_funcionario"].ToString();
                    usuario.email = reader["email"].ToString();
                }
                //using (NpgsqlDataAdapter Adpt = new NpgsqlDataAdapter(cmdSeleciona, pgsqlConnection))
                //{
                //}
            }
        }
        catch (NpgsqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            pgsqlConnection.Close();
        }
    }

例外情况发生在:pgsqlConnection.Open;

这个问题已经公开了一年多,所以我敢给出一个关于您可以检查的内容的不太具体的答案

检查以下事项:

Win+R services.msc或进入taskmanager并检查postgresql服务是否已启动 运行在浏览器中打开的PgAdmin。如果PgAdmin可以连接,并且您可以浏览数据库,则可以排除很多问题。 检查您的连接字符串并确保用户拥有所有角色如果您只想测试,请通过pgadmin授予他所有权限 如果您使用的是停靠环境,则需要将容器设置到同一网络中,并使用host.docker.internal而不是localhost作为主机

下面是linux docker容器环境的工作连接字符串示例:

host=host.docker.internal;port=5432;database=mydatabase;username=userxyz;password=password123

连接被拒绝-您的连接字符串是否正确,服务器是否正在运行,您是否排除了网络连接问题,等等?即,您是否进行了任何基本调试?我已创建了一个Windows窗体应用程序并成功连接,我不认为这与代码本身有关。