FUploadFileCommand.Parameters[0].Value.SetStream(str, FInstanceOwner);
In dieser Zeile wird dem Value mitgeteilt, ob er sich um die Freigabe des übergebenen Streams kümmern soll oder nicht. Da du das einfache Create verwendest, ist FInstanceOwner implizit true. Du kannst also entweder beim Create noch ein False übergeben oder (empfohlen) das aFileStream.Free im Button2Click weglassen. Das Problem ist also nicht das aClient.Free!
Aus diesem Grund hast du auch bei ReverseString keine Probleme, da dort keine Instanzen freigegeben werden müssen.