Einzelnen Beitrag anzeigen

Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#1

Datei Download mit Datasnap

  Alt 17. Jul 2013, 12:11
Hallo,

ich habe einen Datei Download mit Datasnap implementiert (über Streams wie es hier auch schon mal diskutiert worden ist). Das hat bisher auch ganz gut funktioniert, aber inzwischen gibt es häufiger Probleme beim Download. Es tritt keine Exception auf, aber der Download bleibt stehen (beim lStream.Read) und das Client-Programm lässt sich nur noch über den Taskmanager beenden.
Ich vermute, dass es damit zu tun hat, dass mehrere Clients gleichzeitig die gleiche Datei herunterladen wollen.

Auf dem Server die folgende Methode aufgerufen:
Delphi-Quellcode:
function TServerMethodsS.DownloadFile(const strPfad, FileName: String): TStream;
begin
  if DirectoryExists(strPfad) and FileExists(strPfad + FileName) then
       Result := TFileStream.Create(strPfad + FileName, fmOpenRead or fmShareDenyNone)
  else Result := Nil;
end;
Auf den Clients sieht das so aus:
Delphi-Quellcode:
procedure DownloadFile(PfadName, FileName: String);
var lFileStream: TFileStream;
    lStream : TStream;
    Buffer : array [1..CBufSize] of Byte;
    BytesRCount: Integer;
begin
  try
    lFileStream := TFileStream.Create(FileName, fmCreate);
    lStream := DownloadFile(PfadName, FileName);
    if Assigned(lFileStream) and Assigned(lStream) then
    try
      repeat
        BytesRCount := lStream.Read(Buffer, SizeOf(Buffer));

         if BytesRCount > 0 then
           lFileStream.WriteBuffer(Buffer, BytesRCount);
       until (BytesRCount < SizeOf(Buffer));

     finally
       lFileStream.Free;
     end;
   except
     ShowMessage('Fehler beim Download');
   end;
Ich verwende Delphi XE2 Update 4 Hotfix 1, einen TDSServer und Lifecycle=Session. Die Download Dateien sind ca. 20-40 MB gross. Momentan greifen maximal 2-3 Clients gleichzeitig auf die gleiche Datei zum Download zu.

Hat jemand eine Idee, wo das Problem liegen könnte? Gibt es Einstellungen auf dem Server, mit denen ich das Problem evtl. lösen könnte?
Und ist es generell eine gute Idee, so einen Download über Datasnap zu machen? Oder besser über FTP (Indy) oder etwas ganz anderes?
  Mit Zitat antworten Zitat