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?