Bonjour à tous,

A la fin de mes recherches, je publierai un petit topo sur la construction d'un client-serveur de la "vraie vie", car je trouve qu'il y a plein d'écueils. Et finalement, ce n'est pas si simple.

Dans cette attente, je vous livre un blocage que je rencontre :
Un client FMX (sous Windows 64, dev en 10.4) fait appel à un serveur Linux sous Apache (dev en 10.4) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
uses 
  ClientClassesUnit1;
var
  Serveur    : TServerMethods1Client;
 
procedure TFenetrePrincipale.EvOnCreate(Sender: TObject);
begin
  Serveur := TServerMethods1Client.Create(Connexion);
end;
 
procedure TFenetrePrincipale.Clicbouton(Sender: TObject);
var
  reponse : string;
begin
 try
    reponse := Serveur.ReverseString(Edit1.Text);
    except on E : Exception do
           begin
           ShowMessage(e.Message);
           end;
  end;
 ShowMessage(reponse);
end;
Exactement 1 fois sur 2 le client reçoit une réponse : The specified session has expired due to inactivity or was an invalid Session ID

L'appel est en https vers le serveur qui est un module Apache libmod_webbroker.so.
Coté serveur, j'ai pris l'exemple suggéré par Embarcadero, j'ai laissé toutes les options par défaut. Donc DSServerClass1 est en LiveCycle = session

En faisant une écoute réseau, on voit que :

1er appel du client pas de "pragma" dans la stack réseau.

Réponse du serveur : Pragma: dssession=393481.994277.152743,dssessionexpires=1200000. La réponse est correcte du serveur.

2ème appel du client, présence de " Pragma: dssession=393481.994277.152743 " dans la stack

Réponse du serveur : HTTP/1.1 403 Forbidden:
The specified session has expired due to inactivity or was an invalid Session ID

Est-ce que quelqu'un saurait dire pourquoi 1 fois sur 2 le client reçoit une réponse : The specified session has expired due to inactivity or was an invalid Session ID ?


Cordialement

Carmichael