Delphi XE5, WebService HTTPRIO Memory Leak
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
Citation:
//*****************************************************************************
//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:
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; |
[dcc32 Erreur] uWebService.pas(207): E2018 Type Record, Object ou Class requis
bonjour
Le debugger n'en veux pas ...
dans l'interface j'ai :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
getRepositoryResponse = array of domain;
domain = class(TRemotable)
private
Fdescription: string;
Fdescription_Specified: boolean;
Fname_: string;
Fname__Specified: boolean;
Ftemplates: Array_Of_template;
Ftemplates_Specified: boolean;
procedure Setdescription(Index: Integer; const Astring: string);
function description_Specified(Index: Integer): boolean;
procedure Setname_(Index: Integer; const Astring: string);
function name__Specified(Index: Integer): boolean;
procedure Settemplates(Index: Integer; const AArray_Of_template: Array_Of_template);
function templates_Specified(Index: Integer): boolean;
public
destructor Destroy; override;
published
property description: string Index (IS_OPTN or IS_UNQL) read Fdescription write Setdescription stored description_Specified;
property name_: string Index (IS_OPTN or IS_UNQL) read Fname_ write Setname_ stored name__Specified;
property templates: Array_Of_template Index (IS_OPTN or IS_UNBD or IS_NLBL or IS_UNQL) read Ftemplates write Settemplates stored templates_Specified;
end; |
CRLDT
PS je n'ai plus la barre d'outil dans mon éditeur html.....