Bonjour,
J'ai développe un client pour un service web, et j'ai un souci de fuite mémoires.
Suivant ce que j'utilise comme objets de mon interface, j'ai plus ou moins de fuite mémoires quand je quitte l'application.
Je précise que c'est la deuxièmes fois que j'utilise des web services et que je constate cette anomalie.
aide délphi
voilà mes codes d'appel ://*****************************************************************************
//Avant que THTTPRIO ne puisse générer une table de méthodes pour une interface invocable,
//l'interface doit être enregistrée auprès du registre d'invocation.
//Pour enregistrer une interface invocable,
//utilisez la fonction globale InvRegistry pour accéder au registre,
//et utilisez sa méthode RegisterInterface.
//
//Quand un objet THTTPRIO est créé en tant qu'enfant d'une fiche ou d'un module de données,
//il doit être libéré avant la destruction de la fiche ou du module de données.
//Quand il est créé avec un paramètre nil (Delphi) or NULL (C++),
//il sera automatiquement détruit quand le compteur de références atteint zéro.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 procedure TfWebService.BeforeRRPost(const HTTPReqResp: THTTPReqResp; Data: Pointer); const cContentHeader = 'Content-Type: application/soap+xml; charset=utf-8'; begin HttpAddRequestHeaders(Data, PChar(cContentHeader), Length(cContentHeader), HTTP_ADDREQ_FLAG_REPLACE); //or HttpAddRequestHeaders(Data, PChar(cContentHeader), Length(cContentHeader), HTTP_ADDREQ_FLAG_ADD); end; function TfWebService.GetHttpRIO: THTTPRIO; begin result := THTTPRIO.Create(self); //self pas besoin de libérer la mémoire try result.WSDLLocation := 'http://..............................'; result.Port := '...............'; result.Service := '............................'; {$IFDEF DEBUG} result.OnBeforeExecute:= HTTPRIOBeforeExecute ; result.OnAfterExecute := HTTPRIOAfterExecute; {$ENDIF} result.HTTPWebNode.OnBeforePost := BeforeRRPost; except on E:exception do begin ShowMessage('erreur : '+E.Message); end; end; end; function TfWebService.MonService: MonServiceWS; begin // Création d'un HTTPRIO à chaque appels HttpRio :=GetHttpRIO; //création et paramétrage du HttpRio result:= (HttpRio as MonServiceWS ); //***************************************************************************** // création une et une seule fois // cependant ne permet pas de rappeler l'objet // result:= (HttpRio as MonServiceWS); end; procedure TfWebService.bTestRepositoryClick(Sender: TObject); var MyDomaines : getRepositoryResponse; begin try MyDomaines:=MonService.getRepository; //MyDomaines:= MonService(true,'',HTTPRIO1).getRepository ; //MyDomaines:=MonService().getRepository; finally MyDomaines:=nil; end; end;
Partager