Delphi Datasnap Server Memory Leak mit TFileStream als Rückgabewert
Ich benötige eine Funktion in einem Datasnap-Server, der eine .zip-Datei zurückgibt. Also habe ich angefangen mit:
function TGetData.getZip (): TFileStream;
begin
result := TFileStream.Create('test.zip', fmOpenRead and fmShareDenyWrite);
end
Dies funktioniert gut, aber datasnap gibt es nicht frei, so dass ich einen Speicherleckfehler erhalte.
Nächster Versuch: Ich habe bei "TWebModule1.WebModuleAfterDispatch" angefangen. Ich dachte, es könnte helfen, meine Antwort mit "response.SendResponse;" zu senden. und befreie meinen Stream alleine. Also hier eine kurze Version:
procedure TWebModule1.WebModuleAfterDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
test : TFileStream;
begin
response.ContentType := 'application/x-zip-compressed';
test := TFileStream.Create('test.zip', fmOpenRead);
response.ContentStream := test;
response.CustomHeaders.Values['Content-Disposition'] := 'attachment; filename=test12.zip';
response.SendResponse; //Also sendStream didn't help
test.Free;
end;
Dies ist fast die Lösung, aber der datasnap-Server sendet HTML-Code, nachdem mein Stream gesendet wurde, und dieser wird am Ende der Datei geschrieben.
Ich weiß, der datasnap-Server unterstützt TFileStream nicht. Stattdessen sollte ich TDBXStreamValue verwenden, aber es scheint kein funktionierendes Beispiel zu geben ...
Hat jemand Erfahrung mit einem solchen Problem?