Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   Prism Datei download mit dem Compact Framework (https://www.delphipraxis.net/172266-datei-download-mit-dem-compact-framework.html)

Tonic1024 21. Dez 2012 10:49

Datei download mit dem Compact Framework
 
Ich habe folgenden Code ersonnen, der grundsätzlich zwar funktioniert aber bei mehrfachem Aufruf einfach stehen bleibt. Es klappt 10 bis 12 mal in kurzer Folge und dann ist Schluß. Keine Exception, kein Timeout, keine Reaktion. Hab ne Erfolgsquote von etwa 93% ausgerechnet. Das reicht aber nicht.

Bin auf .Net nicht jetzt so fit. Mache ich vielleicht irgendwelche Kardinalfehler?


Delphi-Quellcode:
method MainForm.DownloadFile(RemoteFile: String; LocalFile: String): Cardinal;
var BytesProcessed: Cardinal;
    RemoteStream: Stream;
    LocalStream: Stream;
    Response: WebResponse;
    Request: WebRequest;
    Buffer: Array of Byte;
    BytesRead: Cardinal;
begin
  try
    try
      Request := HTTPWebRequest.Create('http://'+FURL+RemoteFile);
      if Assigned(Request) then
      begin
        Request.Timeout := 60*1000;
        Request.Proxy:=nil;
       
        Response := Request.GetResponse(); // hier bleibt er einfach stehen...
        if Assigned(Response) then
        begin
          RemoteStream := Response.GetResponseStream();
          LocalStream := File.Create(LocalFile);
          Buffer := new Byte[1024];
          repeat
            BytesRead := RemoteStream.Read(Buffer, 0, Buffer.Length);
            LocalStream.Write(Buffer, 0, BytesRead);
            inc(BytesProcessed, BytesRead);
          until BytesRead = 0;
        end;
      end;
    except
      WriteToLog('Ähm... shit...');
    end;
  finally
    if Assigned(RemoteStream) then
    begin
      RemoteStream.Flush;
      RemoteStream.Close;
      RemoteStream.Dispose;
    end;
    if Assigned(LocalStream) then
    begin
      LocalStream.Flush;
      LocalStream.Close;
      LocalStream.Dispose;
    end;

    if Assigned(Response) then
      Response.Close();

    LocalStream:=nil;
    RemoteStream:=nil;
    Response:=nil;
    Request:=nil;
  end;
  Result:=BytesProcessed;
end;
Gruß,

Toni

mjustin 21. Dez 2012 14:49

AW: Datei download mit dem Compact Framework
 
Könnte es am Server liegen (Überlast, oder Download-Quota erreicht)?

Um sicher zu gehen kann man einen kleinen Testserver im eigenen Netz verwenden.
Apache, oder IIS Express, oder zur Not auch Indy TIdHTTPServer.

Tonic1024 21. Dez 2012 15:14

AW: Datei download mit dem Compact Framework
 
Der Server steht bei uns in der Firma und hat sonst ansich keine anderen Aufgaben. Reboote ich den Client, der ja hängt dann, gehts wieder ein paar mal.

Aber ich könnt ja mal ein paar Downloads aus dem Netz testen. Gute Idee.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz