Problems accessing database via WAN

When calling the method below in our LAN: no problems, works perfectly. (client + server running in our LAN)
When calling the ApplicationServer via WAN this method throws an exception “Access violation at address 00000000 in module ‘TestREMApplicationServer.exe’. Execution of address 00000000”

ApplicationServer compiled with Delphi 10.4.1 Sydney
operating system : Windows 2012 R2 x64 build 9600
ApplicationServer is a CodeFirst data abstract server

function TDataService.GetContactInfo(const aContactId: string): string;
var
  DS: IDAServerDataset;
  SQL: string;
begin
  result := '';

  SQL := 'select * from CONTACTEN where CONTACT_ID like :CONTACT_ID';

  // Accessing Connection throws an exception when mathod called from outside the LAN
  // "Access violation at address 00000000 in module 'TestREMApplicationServer.exe'. Execution of address 00000000"
  // even the test below  
  if Connection = nil then
  begin
  end;

  DS := Connection.NewDataset(SQL) as IDAServerDataset;
....
...
end;

What can be the reason for this ?

Regards
Freddy

Hi,

Can you show your connection string(s)?
You can replace login info (user/pass) with ***.
What value of TDataService.AcquireConnection you have?
if it is set to False, connection won’t be created and still be nil.

Can you create a simple testcase that reproduces this case, pls?
You can drop email to support@ for keeping privacy.

Hi,

Are there, beside the exe and postgress-dll’s, extra DLL’s required when deploying a DataAbstract Server ?

We did a test on a pc without dataabstract installed:
The login-service works correct, but when accessing the DataService we get access violations.
We installed dataabstract on that pc, and then it worked fine !

regards
Freddy

Hi,

not yet, unless you have created your app with RO/DA runtime packages

does your login service validate users in PostgreSQL db?

You are using FireDAC driver.
have you read the Deploying on Windows (FireDAC) article?

probably you have missed something required for FireDAC/postgres…

Hi,

does your login service validate users in PostgreSQL db?

Yes, without any problem. Other data is also retrieved in de login-service and returned in UserInfo.

I am working on a minimal test-case …

Regards

Freddy

I don’t think it’s a problem with LAN/WAN.
I can reproduce the error only if the DA-Server is running on a computer without Delphi and DataAbstract installed.

Hi Evgeny,

Attached is a simple test case.

Client:

In unit Globals.pas you can set the connection-parameters for the DA-server

unit Globals;

interface

var

AppServerHost: string;

AppServerPort: string;

implementation

initialization

AppServerHost := '192.168.1.26';

AppServerPort := '8099';

end.

Server:

In unit fServerDataModule.pas you can set the parameters for the database-connection:

procedure TServerDataModule.ModuleCreate(Sender: TObject);

var

ConnectionStringTemplate, ConnectionString: string;

begin

// Start Server

AppServerProperties.DataBaseHost := '192.168.1.72';

AppServerProperties.DataBasePort := 5432;

AppServerProperties.DataBase := 'deve';

AppServerProperties.DataBaseUserID := 'aUserID';

AppServerProperties.DataBasePassword := 'apassword';

ConnectionStringTemplate := 'FireDAC?AuxDriver=PG;Server=%s;Database=%s;UserID=%s;Password=%s';

ConnectionString := Format(ConnectionStringTemplate,

[AppServerProperties.DataBaseHost,

AppServerProperties.DataBase,

AppServerProperties.DataBaseUserID,

AppServerProperties.DataBasePassword

]);

ConnectionManager.Connections[0].ConnectionString := ConnectionString;

Server.Active := true;

end;

Structure of used tables:

CREATE TABLE contacten (

contact_id VARCHAR(20) NOT NULL,

aanmaker_id VARCHAR(20) NOT NULL,

aanmaak_tijd TIMESTAMP WITHOUT TIME ZONE NOT NULL,

wijziger_id VARCHAR(20) NOT NULL,

wijzig_tijd TIMESTAMP WITHOUT TIME ZONE NOT NULL,

inactief VARCHAR(1) DEFAULT '0'::character varying NOT NULL,

contact_id_nieuw INTEGER,

aanspreektitel_cti VARCHAR(30) DEFAULT 'AANSPREEKTITELS'::character varying NOT NULL,

aanspreektitel_ci VARCHAR(30),

naam VARCHAR(45),

straat VARCHAR(200),

post_code VARCHAR(20),

gemeente VARCHAR(20),

land_code VARCHAR(20),

taal_code VARCHAR(20),

telefoonnr VARCHAR(20),

faxnr VARCHAR(25),

gsmnr VARCHAR(30),

email VARCHAR(80),

verantwoordelijke VARCHAR(20),

vertegenwoordiger_cti VARCHAR(30) DEFAULT 'VERTEGENWOORDIGERS'::character varying NOT NULL,

vertegenwoordiger_ci VARCHAR(20),

klantengroepering_cti VARCHAR(30) DEFAULT 'KLANTENGROEPERINGEN'::character varying NOT NULL,

klantengroepering_ci VARCHAR(20),

btw_nr VARCHAR(20),

pdt VARCHAR(20),

sluitingsdag_cti VARCHAR(30) DEFAULT 'SLUITINGSDAGEN'::character varying NOT NULL,

sluitingsdag_ci VARCHAR(20),

dag_moeilijk_leveren_cti VARCHAR(30) DEFAULT 'SLUITINGSDAGEN'::character varying NOT NULL,

dag_moeilijk_leveren_ci VARCHAR(20),

leverfrequentie_cti VARCHAR(30) DEFAULT 'KLANTFREQUENTIES'::character varying NOT NULL,

leverfrequentie_ci VARCHAR(20),

bezoek_frequentie_cti VARCHAR(30) DEFAULT 'KLANTFREQUENTIES'::character varying NOT NULL,

bezoek_frequentie_ci VARCHAR(20),

depannage_vers VARCHAR(20),

bezoekdag_cti VARCHAR(30) DEFAULT 'BEZOEKDAGEN'::character varying NOT NULL,

bezoekdag_ci VARCHAR(20),

bezoek_tour VARCHAR(20),

bezoek_volgnummer_tour VARCHAR(20),

type_levering_cti VARCHAR(30) DEFAULT 'LEVERINGSTYPES'::character varying NOT NULL,

type_levering_ci VARCHAR(20),

vorige_klantengroepering_cti VARCHAR(30) DEFAULT 'KLANTENGROEPERINGEN'::character varying NOT NULL,

vorige_klantengroepering_ci VARCHAR(20),

klantnr_voorganger VARCHAR(20),

verbruikersprijs_cti VARCHAR(30) DEFAULT 'VERBRUIKERSPRIJZEN'::character varying NOT NULL,

verbruikersprijs_ci VARCHAR(20),

top200_top600_cti VARCHAR(30) DEFAULT 'TOP200_TOP600'::character varying NOT NULL,

top200_top600_ci VARCHAR(20),

oplegger_cti VARCHAR(30) DEFAULT 'OPLEGGERCODES'::character varying NOT NULL,

oplegger_ci VARCHAR(20),

latitude DOUBLE PRECISION DEFAULT 0,

longitude DOUBLE PRECISION DEFAULT 0,

klant_formule_cti VARCHAR(30) DEFAULT 'KLANTFORMULES'::character varying NOT NULL,

klant_formule_ci VARCHAR(20),

commerciele_naam VARCHAR(100),

gsmnr2 VARCHAR(40),

gsmnr3 VARCHAR(40),

email2 VARCHAR(80),

betaalwijze_cti VARCHAR(30) DEFAULT 'BETAALWIJZES'::character varying NOT NULL,

betaalwijze_ci VARCHAR(20),

rayonetiket_cti VARCHAR(30) DEFAULT 'RAYONETIKETTEN'::character varying NOT NULL,

rayonetiket_ci VARCHAR(20),

scanninggroep_cti VARCHAR(30) DEFAULT 'SCANNINGGROEPEN'::character varying NOT NULL,

scanninggroep_ci VARCHAR(20),

prijsklasse_cti VARCHAR(30) DEFAULT 'PRIJSKLASSES'::character varying NOT NULL,

prijsklasse_ci VARCHAR(20),

vaste_toeslag DOUBLE PRECISION,

aantal_mediascreens INTEGER,

formuleconsulent_cti VARCHAR(30) DEFAULT 'VERTEGENWOORDIGERS'::character varying NOT NULL,

formuleconsulent_ci VARCHAR(20),

saldo DOUBLE PRECISION,

blokkeringscode_cti VARCHAR(30) DEFAULT 'BLOKKERINGSCODES'::character varying NOT NULL,

blokkeringscode_ci VARCHAR(20),

doorfact_via_lambrechts VARCHAR(20),

lever_via_versplatform VARCHAR(20),

bestel_via_lambrechts VARCHAR(20),

vaste_toeslag_tot_datum TIMESTAMP(0) WITHOUT TIME ZONE,

var_toesl_percentage DOUBLE PRECISION,

var_toesl_begindatum TIMESTAMP(0) WITHOUT TIME ZONE,

var_toesl_barema_omzet DOUBLE PRECISION,

var_toesl_aantal_facturen INTEGER,

var_toesl_bijkomend_bedrag DOUBLE PRECISION,

eo_id VARCHAR(50),

f_id VARCHAR(50),

foto_onbemande_kassa VARCHAR(1) DEFAULT 'N'::character varying,

foto_zelfb_weegschaal VARCHAR(1) DEFAULT 'N'::character varying,

CONSTRAINT contacten_pk PRIMARY KEY(contact_id)

)

WITH (oids = false);

CREATE TABLE our_gebruikers (

gebruiker_id VARCHAR(20) NOT NULL,

aanmaker_id VARCHAR(20) NOT NULL,

aanmaak_tijd TIMESTAMP WITHOUT TIME ZONE NOT NULL,

wijziger_id VARCHAR(20) NOT NULL,

wijzig_tijd TIMESTAMP WITHOUT TIME ZONE NOT NULL,

inactief VARCHAR(1) DEFAULT '0'::character varying NOT NULL,

basis_firma_id VARCHAR(3) NOT NULL,

omschrijving VARCHAR(100) NOT NULL,

toegangstatus_cuid VARCHAR(51) NOT NULL,

geldigheidsduur_van_wachtwoord NUMERIC(38,0),

wachtwoord_vervallen VARCHAR(1),

aantal_ongeldige_aanmeldingen NUMERIC(38,0),

tijdstip_laatste_aanmelding TIMESTAMP WITHOUT TIME ZONE,

gebruiker_contact_id VARCHAR(20),

wachtwoord_verplicht VARCHAR(1) DEFAULT '1'::character varying,

default_doc_profiel NUMERIC(22,0),

default_afdeling VARCHAR(20),

expert_workflow_afhandeling VARCHAR(1) DEFAULT '0'::character varying,

intern_emailadres VARCHAR(100),

badgenummer VARCHAR(20),

max_ongeldige_aanmeldingen NUMERIC(38,0) DEFAULT 3 NOT NULL,

afdeling_cti VARCHAR(30) DEFAULT 'AFDELINGEN'::character varying NOT NULL,

afdeling_ci VARCHAR(20),

gsmnr VARCHAR(30),

ice_naam VARCHAR(100),

ice_gsmnr VARCHAR(30),

geboortedatum TIMESTAMP(0) WITHOUT TIME ZONE,

datum_indienst TIMESTAMP(0) WITHOUT TIME ZONE,

categorie_cti VARCHAR(30) DEFAULT 'GEBRUIKER_CATEGORIEEN'::character varying NOT NULL,

categorie_ci VARCHAR(20),

basis_adres_contact_id VARCHAR(20) DEFAULT 'C'::character varying NOT NULL,

wie_is_wie VARCHAR(1) DEFAULT 1 NOT NULL,

CONSTRAINT our_gebruikers_pk PRIMARY KEY(gebruiker_id)

)

WITH (oids = false);

CREATE INDEX our_gebruikers_i1 ON public.our_gebruikers

USING btree (basis_firma_id COLLATE pg_catalog."default", gebruiker_id COLLATE pg_catalog."default");

In \TestCase\Win32\Debug you will find the postgress-DLL’s

Met vriendelijke groeten, Salutations distinguées,

Mit freundlichen Grüßen, Kind regards, Z poważaniem,

Freddy Tutak

image002.jpg

TpiCom bv

Mobile : +32 498 10 52 69

www.tpicom.eu

image004.jpg

image005.jpg

Hi,

Your dataservice uses TDASpiderMonkeyScriptProvider that requires mozjs185.dll.
in your case, this dll wasn’t shipped.

once you will ship it, everything will work as expected.
we recently changed static linking of this dll to load by demand so requirement of this dll was hidden.
I’ll update code so correspondent error will be raised again.

1 Like

Thanks, logged as bugs://85435

bugs://85435 got closed with status fixed.