Problema di sessione con web server SOAP

di il
3 risposte

Problema di sessione con web server SOAP

Ciao a tutti,

premetto che non ho familiarità con l'utilizzo dei web server e purtroppo il primo server a cui sto cercando di collegami mi sta rendendo la vita un po' difficile.

Il mio web server è formato da tre servizi: SYSTEM, QUEUE, STORY, ognuno di essi ha il proprio wsld che fanno riferimento a tre diversi indirizzi:

../inewswebservice/services/inewssystem
../inewswebservice/services/inewsqueue
../inewswebservice/services/inewsstory

per prima cosa bisogna autenticarsi e creare una sessione tramite inewssystem e la cosa va a buon fine.

procedure TForm1.FormCreate(Sender: TObject);
var
  C: Connect;
  Resp: ConnectResponse;
begin

  h1 := THttpRio.Create(nil);
  h2 := THttpRio.Create(nil);
  iNews := GetINEWSSystemPortType(true, '',h1);

  C := Connect.Create;
  Resp := ConnectResponse.Create;
  try
    C.Username := 'xx';
    C.Password := 'xxx';
    C.Servername := 'xxxx';
    try
      Resp := iNews.Connect(C);
    except
      Memo1.Lines.Add('impossibile connettersi a : ' + C.Servername);
    end;
  finally
    Resp.Free;
    C.Free;
  end;
end;

il problema nasce quando devo utilizzare una funzione presente in inewsqueue

procedure TForm1.Button1Click(Sender: TObject);
var 
    Q : SetCurrentQueue;
    QR: SetCurrentQueueResponse;
begin
  Queue := GetINEWSQueuePortType(true, '', h2);
  Q :=  SetCurrentQueue.Create;
  Q.QueueFullName := 'PATH.NAME';
  try
    Queue.SetCurrentQueue(Q);

  finally
    Q.Free;    
  end;
end;

A questo punto il server mi restituisce “Fault occurred while processing”.

Questo errore è causato dal fatto che il secondo servizio non riconosce la sessione aperta.

Ho provato a replicare le richieste a mano con ARC, inserendo nel body il codice xml generato da Delphi, e lì tutto va a buon fine.
Credo che il problema stia nel fatto che una volta aperta la sessione vengono scaricati due cookie con i dati della sessione stessa e a questi dovrebbe avere accesso anche il secondo componente THttpRIO (h2) ma probabilmente questo non avviene.

In rete non ho trovato nulla a riguardo, non ho trovato il modo di impostare a mano il percorso dei cookie e non so nemmeno se si possa fare.
Avete qualche suggerimento?

Grazie in anticipo,

Andrea.

3 Risposte

  • Re: Problema di sessione con web server SOAP

    Che io sappia, THttpRIO non ha un supporto integrato per i cookie.

    Effettivamente, a memoria non è uno strumento che di solito viene utilizzato nei Web Service, visto che gli standard basati sulle estensioni di SOAP dovrebbero già supportare mezzi specifici, e che il protocollo HTTP andrebbe usato solo per il trasporto quindi non si dovrebbe utilizzare nulla di legato ad HTTP per gestire “valori di business”.

    Non esiste altro modo di veicolare la sessione? Non c'è un supporto a qualche token o simile?

  • Re: Problema di sessione con web server SOAP

    Ciao Alka,
    grazie della risposta.

    ho risolto copiando a mano i cookie da un componente THttpRIO all'altro:

    h2.HTTPWebNode.GetHTTPReqResp.HTTP.CookieManager := h1.HTTPWebNode.GetHTTPReqResp.HTTP.CookieManager;

    come al solito giorni a sbatterci la testa e poi si risolve tutto con una linea di codice :/

    Grazie ancora.

    Andrea.

  • Re: Problema di sessione con web server SOAP

    17/10/2023 - Andrea08 ha scritto:


    ho risolto copiando a mano i cookie da un componente THttpRIO all'altro […]

    In effetti, non avevo pensato che si potesse “bypassare” l'interfaccia ad alto livello con cui si comunica coi WS andando nello strato inferiore, quello relativo al colloquio in HTTP, lavorando quindi su quello strato.

    Questa cosa la terrò a mente che non si sa mai quando potrà tornare utile. :D

    Grazie!

Devi accedere o registrarti per scrivere nel forum
3 risposte