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
//*****************************************************************************
//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.
voilà mes codes d'appel :
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;