No se pueden recuperar TStreams de más de 260,000 bytes de un servidor Datasnap

Tengo un servidor Delphi 10.1 Berlin Datasnap, que no puede devolver paquetes de datos (a través de un TStream) de más de 260,000 bytes.

Lo he programado siguiendo el\ Object Pascal \ DataSnap \ FireDAC muestra de Delphi, que también muestra este problema.

El problema se puede ver simplemente abriendo esa muestra, poniendo en blanco el IndexFieldName del componente qOrders en ServerMethodsUnit.pas y cambiando su propiedad SQL a:

select * from Orders
union 
select * from Orders

Ahora la cantidad de datos a enviar está más allá de 260,000 bytes, que parece ser el punto donde no puede recuperarlos del cliente. Obteniendo una EFDException [FireDAC] [Stan] -710. Formato de almacenamiento binario no válido.

Los datos se envían como un flujo que se obtiene de un FDSchemaAdapter en el servidor y se carga en otro FDSchemaAdpater en el cliente. La conexión entre el Cliente y el Servidor también es FireDAC.

Así es como el servidor devuelve ese flujo:

function TServerMethods.StreamGet: TStream;
begin
  Result := TMemoryStream.Create;
  try
    qCustomers.Close;
    qCustomers.Open;
    qOrders.Close;
    qOrders.Open;
    FDSchemaAdapter.SaveToStream(Result, TFDStorageFormat.sfBinary);
    Result.Position := 0;
  except
    raise;
  end;
end;

Y así es como el Cliente lo recupera:

procedure TClientForm.GetTables;
var
  LStringStream: TStringStream;
begin
  FDStoredProcGet.ExecProc;
  LStringStream := TStringStream.Create(FDStoredProcGet.Params[0].asBlob);
  try
    if LStringStream <> nil then
    begin
      LStringStream.Position := 0;
      DataModuleFDClient.FDSchemaAdapter.LoadFromStream(LStringStream, TFDStorageFormat.sfBinary);
    end;
  finally
    LStringStream.Free;
  end;
end;

El Cliente no obtiene todos los datos en el parámetro Blob. Guardo el contenido de Stream en el servidor y el contenido que llega al parámetro Blob en el Cliente, y tienen el mismo tamaño, pero el contenido del parámetro Blob tiene su contenido truncado y los últimos Kbytes son ceros .

Así es como guardo en el servidor el contenido que irá a Stream:

FDSchemaAdapter.SaveToFile('C:\Temp\JSON_Server.json', TFDStorageFormat.sfJSON);

Así es como verifico lo que obtengo en el parámetro de blob del Cliente:

TFile.WriteAllText('C:\Temp\JSON_Client.json', FDStoredProcGet.Params[0].asBlob);

Puedo ver que el Cliente obtiene los datos truncados.

¿Sabes cómo solucionarlo o una solución alternativa para recuperar todo el contenido de Stream del Servidor Datasnap a mi Cliente?

Actualizar: He actualizado a Delphi 10.1 Berlin Update 2, pero el problema persiste.

Gracias.

Respuestas a la pregunta(6)

Su respuesta a la pregunta