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:
Cela fonctionnera, et l'API me répondra comme il se doit.
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 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;
Par contre, si je fais le même appel dans mon thread, j'ai une violation au niveau de la réponse.
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 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?
Partager