Laden...

WebClient funktioniert nicht im Intranet

Erstellt von hipp1010 vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.683 Views
H
hipp1010 Themenstarter:in
79 Beiträge seit 2011
vor 11 Jahren
WebClient funktioniert nicht im Intranet

Hallo,

habe eine Downloadfunktion, die übers Internet super läuft:


public bool FddiDownloadFiles(string webAddress, string fileName, string destinationPath)
{
   bool retValue = false;
   try
    {
        string httpFileName = @webAddress + @"/" + @fileName;
        string destFileName = @destinationPath + @fileName;
        WebClient oWebClient = new WebClient();
        oWebClient.Proxy = null;
        oWebClient.DownloadFile(httpFileName, destFileName);
        oWebClient.Dispose();
        retValue = true;
    }
    catch (Exception ex)
    {
        string msg = ex.Message;
    }
    return retValue;
}

Diese Funktion ist aus einem Test-programm, die Original-Funktion befindet sich in einer Assembly.
Bisher habe ich eine Webadresse angegeben, die sich physisch bei unserer Hauptfirma in Wien befindet. Unsere Domäne und unser Netz kann ohne user/PW darauf zugreifen.
Nun haben wir bei uns direkt einen Windows 7 Prof. Rechner mit IIS 7.5. Es existiert eine Webseite, die DirectoryListing = true besitzt. Über den Browser sehe ich auch die gewünschten Dateien.
Nun möchte ich mit der obigen Routine ebenso auf die eine Zip-Datei zugreifen, aber hier entsteht ein Problem.
Die Routine startet und von 10 Versuchen des Downloads läuft sie nur 1x korrekt durch. Die anderen male erhalte ich Dateien, bei denen im Schnitt 3-4KB fehlen und die Routine nicht mehr zurückkehrt.
Bei


oWebClient.DownloadFile(httpFileName, destFilename);

ist Schluss. Keine Exception. Nichts. Die bisher geholte Datei wird mit 111.562KB angezeigt, im Original mit 111.563KB. (dies kann auch damit zusammenhängen, dass unser IIS-Rechner Platten mit 4KB-Blöcken besitzt, mein Rechner aber Platten mit 512Byte-Blöcken)
Schaue ich mir die Properties jeweils an, so sehe ich erstaunlicherweise unter "Größe auf Datenträger" bei beiden exact 114.241.536 Bytes. ?(
Beim 2. Versuch sehe ich 111.559KB mit 114.237.440 Bytes.

Vielleicht muss ich noch etwas auf demIIS-Rechner einstellen. Ichhabe nur das Gefühl, dass sich der Download auf Grund der Geschwindigkeit selbst überholt und das Ende nicht ordentlich mitbekommt.

Nach eine Weile bekomme ich die Exception-Message "Ausnahmefehler während einer WebClient-Anforderung."

Mein httpFileName lautet: http://10.xxx.xxx.xxx/DE/media.zip

Ich hoffe, mir kann hier jemand schnell helfen 🙂, denn es ist wirklich eilig.

Gruß Hipp

4.221 Beiträge seit 2005
vor 11 Jahren

Als erstes würde ich prüfen, ob das Ziel-File schon existiert... falls es existiert, dann das File löschen... und erst wenn es erfolgreich gelöscht wurde den Download starten...

So hast Du schon mal Fehlerquellen ausgeschlossen.

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

H
hipp1010 Themenstarter:in
79 Beiträge seit 2011
vor 11 Jahren

Das Zielfile wird vorher gelöscht.

Erstaunlich ist, dass es mit der Adress des Servers in Wien funktioniert. (hier natürlich übers WEB. Zur Zeit bin ich am permanenten Starten und habe Mal 5 erfolgreiche Downloads, dann wieder einen, der sich aufhängt.
Die Exception schmeisst auch nichts Brauchbares.

Nun habe ich mein testprogramm so optimiert, dass ich den Download einfach öfters anstossen kann. Mal klappt es 9x, dann wieder 14x, dann nur 3x, 12x, 1x, ....

Habe auch, obwohl es unsinnig ist, einen GC integriert.

Es ist einfach :evil:

Gruß Hipp

2.891 Beiträge seit 2004
vor 11 Jahren

Als erstes würde ich prüfen, ob das Ziel-File schon existiert... falls es existiert, dann das File löschen... und erst wenn es erfolgreich gelöscht wurde den Download starten...

Und ich würde an den Zieldateinamen erstmal ein ".part" anhängen und erst nach erfolgreichen Durchlaufen von DownloadFile die Datei dann in den tatsächlichen Namen der Zieldatei umbenennen.
So siehst du schonmal, dass/ob der Download einer Datei fertig ist.

H
hipp1010 Themenstarter:in
79 Beiträge seit 2011
vor 11 Jahren

Ich sehe im Verzeichnis die Zieldatei. Das Programm bekommt nach einer Weile einen Timeout (Exception) und wnn ich danach versuche die Datei zu öffnen, sagt mir der Unzip "geht nicht".

Ich habe festgestellt, dass die kaputten Dateien IMMER extact 4096 Bytes zu wenig haben, egal welche Datei ich auch versuche.

Das Gleiche geschieht, wenn ich einen Download via HttpWebRequest mache. Beim Befehl HttpWebResponse response = request.GetResponse() as HttpWebResponse; geht er kaputt.

Habe einen 2. Rechner in unserer Domäne mit IIS 7 ausgestattet und hier passiert das Gleiche.

Ich vermute, dass es an unserem Netz oder an den IIS-Rechnern (Konfiguration?) liegt. ?(

Gruß Hipp