Pérdida de memoria del servidor Delphi Datasnap usando TFileStream como valor de retorno

Necesito una función en un servidor de datos, que devuelve un archivo .zip. Entonces comencé con:

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

Esto funciona bien, pero datasnap no lo libera, así que recibo un error de pérdida de memoria.

Siguiente intento: comencé en "TWebModule1.WebModuleAfterDispatch". Pensé que podría ayudar enviar mi respuesta con "response.SendResponse"; y liberar mi transmisión por mi cuenta. Así que aquí una versión corta:

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 es casi la solución, creo, pero el servidor de datos envía un código html después de que se envió mi transmisión y esto se escribe al final del archivo.

Lo sé, el servidor de datos no admite TFileStream. En cambio, debería usar TDBXStreamValue, pero parece que no hay ningún ejemplo que funcione ...

¿Alguien tiene experiencia con tal problema?

Respuestas a la pregunta(1)

Su respuesta a la pregunta