[WEBSERVICE+THREAD] Pas d'accès
Mon application actuelle utilise des web-services d'une API avec succès. Les accès se font de manière séquentielle.
Afin d'améliorer mon application, en performance, je veux utiliser des threads pour certaines actions.
Mais malheureusement, ca coince. Je ne vois pas trop pourquoi et comme je ne suis pas très à l'aise avec les webservices, je me permets de solliter une aide sur le forum. :)
Pour un appel a la fonction KeepAlive de l'API (fonction pour maintenir la connexion active), dans mon application principale, si je fais:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| procedure KeepAlive;
var
req:KeepAliveReq;
resp:KeepAliveResp;
httprio:thttprio;
begin
httprio:=Thttprio.Create(nil);
httprio.WSDLLocation:='GlobalService.xml';
httprio.Port:='GlobalService';
httprio.Service:='GlobalService';
httprio.HTTPWebNode.UseUTF8InHeader := True;
httprio.HTTPWebNode.InvokeOptions := [soAutoCheckAccessPointViaUDDI];
req:=KeepAliveReq.Create;
req.header:=GlobalService1.APIRequestHeader.Create;
req.header.sessionToken:=sessionToken;
try
resp:= (httprio as GlobalService).keepAlive(req);
except;
...
end;
...
end; |
Cela fonctionnera, et l'API me répondra comme il se doit.
Par contre, si je fais le même appel dans mon thread, j'ai une violation au niveau de la réponse.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| procedure TMyThread.Execute;
var
req:KeepAliveReq;
resp:KeepAliveResp;
httprio:thttprio;
begin
httprio:=Thttprio.Create(nil);
httprio.WSDLLocation:='GlobalService.xml';
httprio.Port:='GlobalService';
httprio.Service:='GlobalService';
httprio.HTTPWebNode.UseUTF8InHeader := True;
httprio.HTTPWebNode.InvokeOptions := [soAutoCheckAccessPointViaUDDI];
req:=KeepAliveReq.Create;
req.header:=GlobalService1.APIRequestHeader.Create;
req.header.sessionToken:=sessionToken;
try
resp:= (httprio as GlobalService).keepAlive(req); // <--- violation
except;
...
end;
...
end; |
Pourquoi cela fonctionne il dans l'application principale et pas dans le thread?