Search code examples
postgresqldelphidelphi-xe8mormot

Delphi mORMot No connection could be made because the target machine actively refused it


I test mORMot component. I compiled standart demo "28 - Simple RESTful ORM Server" Run it and get an eror.

Code:

var
  aModel: TSQLModel;
  aProps: TSQLDBConnectionProperties;
  aRestServer: TSQLRestServerDB;
  aHttpServer: TSQLHttpServer;
begin
// set logging abilities
SQLite3Log.Family.Level := LOG_VERBOSE;
//SQLite3Log.Family.EchoToConsole := LOG_VERBOSE;
SQLite3Log.Family.PerThreadLog := ptIdentifiedInOnFile;
// ODBC driver e.g. from http://ftp.postgresql.org/pub/odbc/versions/msi


aProps := TODBCConnectionProperties.Create('','Driver=PostgreSQL Unicode'+
  {$ifdef CPU64}'(x64)'+{$endif}';Database=postgres;'+
  'Server=127.0.0.1;Port=5433;UID=postgres;Pwd=postgres','','');

//readln;

try
// get the shared data model
aModel := DataModel;
// use PostgreSQL database for all tables
VirtualTableExternalRegisterAll(aModel,aProps);
try
  // create the main mORMot server
  aRestServer := TSQLRestServerDB.Create(aModel,':memory:',false); // authentication=false
  try
    // optionally execute all PostgreSQL requests in a single thread
    aRestServer.AcquireExecutionMode[execORMGet] := amBackgroundORMSharedThread;
    aRestServer.AcquireExecutionMode[execORMWrite] := amBackgroundORMSharedThread;
    // create tables or fields if missing
    aRestServer.CreateMissingTables;
    // serve aRestServer data over HTTP
    aHttpServer := TSQLHttpServer.Create(SERVER_PORT,[aRestServer],'+',useHttpApiRegisteringURI);
    try
      aHttpServer.AccessControlAllowOrigin := '*'; // allow cross-site AJAX queries
      writeln('Background server is running.'#10);
      write('Press [Enter] to close the server.');
      readln;
    finally
      aHttpServer.Free;
    end;
  finally
    aRestServer.Free;
  end;
finally
  aModel.Free;
end;
finally
  aProps.Free;
end;
end.

error

{"Message":"TODBCLib error: [08001] Could not connect to the server;\nNo connection could be made because the target machine actively refused it.\r\n [127.0.0.1:5433]

How to clear it.


Solution

  • I just tested it with Delphi Seattle 10 and the ODBC driver from http://ftp.postgresql.org/pub/odbc/versions/msi/psqlodbc_09_03_0400.zip - with no problem.

    Ensure your PostgreSQL server has been defined to run on the same port as expected by the source. Edit the 5433 value into 5432 if you used the default port number.

    Being paranoid, I try to always change the default port, which reduces network scan attacks (at least from fast scan). I never use port 22 for ssh, nor 5432 for PostgreSQL. Sorry for the inconvenience.