Nel tentativo di connetermi ad un server PostgreSQL versione 8 mi è comparso il seguente errore:
{"Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host."}
il codice che ho usato è:
using System;
using System.Collections.Generic;
using System.Data;
using Npgsql;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      //NpgsqlEventLog.Level = LogLevel.Debug;
      //NpgsqlEventLog.LogName = @"C:\NpgsqlTests.LogFile.txt";
      //NpgsqlEventLog.EchoMessages = true;


      PostgeSQL-style connection string
      string connstring = "Server=MIOSERVER;Port=5432;User Id=MIOUTENTE;Password=MIAPASSWORD;Database=MIODATABASE;";

      using (Npgsql.NpgsqlConnection cnn = new Npgsql.NpgsqlConnection(connstring))
      {
        cnn.Open();
        string sql = "SELECT * FROM channels";
        DataSet ds = new DataSet();
        Npgsql.NpgsqlDataAdapter da = new Npgsql.NpgsqlDataAdapter(sql, cnn);
        ds.Reset();
        da.Fill(ds);
        DataTable dt = ds.Tables[0];
      }
  }
}
con il seguente driver http://www.postgresql.org/ftp/projec...ndry/npgsql/

L'errore era dovuto alla configurazione di PostgreSQL, in pratica non permetteva la connessione remota del client.

Per abilitare la connessione bisogna specificare la rete di provenienza dei client nel file [FolderInstallazione]\data\pg_hba.conf, ad esempio:
host all all 10.5.30.0/24 trust
inoltre bisogna verificare che PostgreSQL sia in ascolto sul corretto IP. Per far questo edita il file [FolderInstallazione]\data\postgresql.conf e modifica la chiave listen_addresses, ad esempio
listen_addresses='192.168.111.4 192.168.111.5'
in alternativa per rimanere in ascolto su tutti gli IP:
listen_addresses='*'