Vazamento de memória do servidor Delphi Datasnap usando TFileStream como valor de retorno

Eu preciso de uma função em um servidor de datasnap, que retorna um arquivo .zip. Então eu comecei com:

function TGetData.getZip (): TFileStream;
begin
   result := TFileStream.Create('test.zip', fmOpenRead and fmShareDenyWrite);
end

Isso funciona bem, mas o datasnap não o libera, então recebo um erro de vazamento de memória.

Próxima tentativa: comecei em "TWebModule1.WebModuleAfterDispatch". Eu pensei que poderia ajudar a enviar minha resposta com "response.SendResponse;" e liberar meu stream por conta própria. Então aqui está uma versão curta:

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;

Esta é quase a solução que eu acho, mas o servidor datasnap envia o código html após o envio do meu fluxo e isso está escrito no final do arquivo.

Eu sei, o servidor datasnap não suporta TFileStream. Em vez disso, devo usar TDBXStreamValue, mas parece não haver exemplo de trabalho ...

Alguém tem experiência com esse problema?

questionAnswers(1)

yourAnswerToTheQuestion