none
WebClient.DownloadFile liefert alten Stand RRS feed

  • Frage

  • Hallo!

    Der WebClient ist nur exemplarisch, mein Problem besteht auch bei der Verwendung anderer Varianten um Dateien herunter zu laden. Wir beobachten hier das Problem das wir alte Versionen einer Datei zurück erhalten, wenn zum Beispiel WebClient.DownloadFile verwendet wird, beim Abruf derselben Datei mit einem Browser (z. B. Internet Explorer) kommt der aktuelle Stand zurück.

    Woran liegt dies? Wie kann man es umgehen?


    - Florian
    Donnerstag, 22. Dezember 2011 12:29

Antworten

  • Hallo Robert,

    das hatte ich noch nicht probiert. Zuletzt verhielt es sich genau andersrum, der IE bekam was altes und über den WebClient bekam ich das aktuelle Ergebnis, daher hab ich mir die Protokolle vom WebServer angesehen und bemerkt das die Anfragen nicht alle zu diesem durchgehen. Ich denke das Problem liegt im Forefront und ist nicht Clientseitig zu lösen.

    Ich bedanke mich für das Interesse und alle Lösungsvorschläge, es hat geholfen der Ursache näher zu kommen.

    Grüße


    - Florian
    • Als Antwort markiert Florian Haupt Freitag, 23. Dezember 2011 08:52
    Freitag, 23. Dezember 2011 07:14

Alle Antworten

  • Ohne Gewähr*: Das liegt am Cache. Stell mal einen anderen Cache-Level ein.

    *) Leider kann ich mich nicht mehr exakt daran erinnern: Obiges Verfahren hatte noch andere Stolperfallen parat. Daher ist afair nur der direkte Weg mit einem eigenen WebRequest eine Lösung.

    Donnerstag, 22. Dezember 2011 12:37
  • Der Standard ist laut MSDN "BypassCache" (sollte doch eigentlich passen) für den CacheLevel, bleibt eigentlich nur "NoCacheNoStore" als Alternative. Das Verhalten hat sich nicht geändert, d. h. ich kann keinen Einfluss durch den CacheLevel beobachten.

    WebRequest liefert auch einen veralteten Stand.

    • Bearbeitet Florian Haupt Donnerstag, 22. Dezember 2011 12:54 WebRequest Anmerkung
    Donnerstag, 22. Dezember 2011 12:51
  • Das ist imho mit DownloadFile auch nicht in den Griff zu bekommen.
    Donnerstag, 22. Dezember 2011 12:55
  • Das ist imho mit DownloadFile auch nicht in den Griff zu bekommen.

    Es sollte zumindest mit einem Zufallsparameter gehen. Also bspw.:

      http://server/datei.xyz?f3ju362

    übergeben. Der Parameter ist dann jedesmal ein anderer (Guid würde auch gehen) und der Server sollte dann die Datei erneut ausliefern.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 22. Dezember 2011 13:13
    Moderator
  • Das Problem besteht nicht nur bei DownloadFile, gleiches Verhalten bei WebRequest oder auch bei DataSet.ReadXml. Ich frage hier nach um der Ursache auf den Grund zu gehen. Den Workarround habe ich schon im Zusammenhang mit einer BugMeldung (Microsoft Connect) von 2008 gesehen, wundert mich schon das der noch nötig sein soll, ich möchte diesen auch ungern verwenden.
    - Florian
    Donnerstag, 22. Dezember 2011 13:24
  • Hallo Florian,

    da ich das Problem nicht nachvollziehen kann (klappt bei mir einwandfrei), wäre es nett, wenn Du ein paar mehr Details posten könntest.

    • Beispielcode bzw. Minianwendung zum reproduzieren.
    • Genaue Serverinfo (OS, Webserver inkl. Version, ggfs. sogar URL zum testen)
    • Welches OS setzt Du clientseitig ein?
    • Welche IE Version ist auf dem Client installiert?
    • Welche Einstellungen bzgl. Proxy und Caching hat der IE?
    • Falls serverseitig dynamisch ausgeliefert wird, bitte ein Beispiel für den Code posten.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 22. Dezember 2011 13:43
    Moderator
  • Hallo Stefan,

    da ich das Problem nicht nachvollziehen kann (klappt bei mir einwandfrei), wäre es nett, wenn Du ein paar mehr Details posten könntest.

    • Beispielcode bzw. Minianwendung zum reproduzieren.
    string strTestFile = "http://www.pisoftware.de/test.xml";
    string strCommonAppDataTestFile = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\test.xml";
    RequestCachePolicy policy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
    WebClient webClient = new WebClient();
    webClient.CachePolicy = policy;
    webClient.DownloadFile(strTestFile, strCommonAppDataTestFile);
    

    • Genaue Serverinfo (OS, Webserver inkl. Version, ggfs. sogar URL zum testen)

    Windows Webserver2008 R2, IIS7

    • Welches OS setzt Du clientseitig ein?

    Windows 7 x64

    • Welche IE Version ist auf dem Client installiert?

    IE9, verhält sich aber auch im Opera gleich

    • Welche Einstellungen bzgl. Proxy und Caching hat der IE?

    "Neuere Versionen der gespeicherten Seiten suchen" steht auf "automatisch". Ein Proxy wird nicht verwendet.

    Serverseitigen Code habe ich nicht zur Verfügung.

    Ich weiß nicht warum, aber im Moment kommt alles aktuell zurück...

    • Bearbeitet Florian Haupt Donnerstag, 22. Dezember 2011 15:10 Anm.: Reproduzierbarkeit
    Donnerstag, 22. Dezember 2011 14:52
  • Es scheint etwas Serverseitiges zu sein, dann bin ich hier damit wohl falsch. Ist mir allerdings nicht klar warum dieser die GET Anfragen unterschiedlich behandelt.
    - Florian
    Donnerstag, 22. Dezember 2011 15:36
  • Hallo Robert,

    das hatte ich noch nicht probiert. Zuletzt verhielt es sich genau andersrum, der IE bekam was altes und über den WebClient bekam ich das aktuelle Ergebnis, daher hab ich mir die Protokolle vom WebServer angesehen und bemerkt das die Anfragen nicht alle zu diesem durchgehen. Ich denke das Problem liegt im Forefront und ist nicht Clientseitig zu lösen.

    Ich bedanke mich für das Interesse und alle Lösungsvorschläge, es hat geholfen der Ursache näher zu kommen.

    Grüße


    - Florian
    • Als Antwort markiert Florian Haupt Freitag, 23. Dezember 2011 08:52
    Freitag, 23. Dezember 2011 07:14
  • Hallo Florian.H,

    Ich möchte Dich bitten folgendes lesen und die Beiträge die Dir geholfen haben zu bewerten.

    Vielen Dank.

    Nutzen Sie die Bewertungsfunktionen ("Antwort" und "Hilfreich") in den MSDN Foren! Unter anderem können andere später eine Lösung schneller finden. Es ist also wünschenswert, dass die fragenden (Benutzer) die Postings/Beiträge anderer Beantworter bewerten.
    Hier dazu die wichtigsten Anhaltspunkte aus den Forenregeln und FAQs.


    Lösungsbeiträge als „Die Antwort“ markieren
    Bitte markieren Sie den Beitrag, der zur Lösung geführt hat, als "Die Antwort". Durch Bewerten eines Beitrags als "Die Antwort" können andere Teilnehmer die Lösung schneller finden. Außerdem können Sie dem Benutzer, der die Antwort eingereicht hat, für seinen Beitrag danken und zur Steigerung der Antwortqualität in der Diskussionsgruppe beitragen.
    [Quelle: Forenregeln]

    Wie bewerte ich einen Beitrag? Um einen Beitrag als hilfreich zu bewerten, klicken Sie in einem beliebigen Beitrag auf Als hilfreich bewerten. Sie können Ihre Stimme nur einmal für einen Beitrag abgeben.
    [Quelle: Häufig gestellte Fragen]

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.


    Freitag, 23. Dezember 2011 08:47
    Moderator
  • Hallo Robert,

    entsprechende Bewertungen habe ich bereits vorgenommen. "Die Antwort" habe ich hier eigentlich nicht.


    - Florian
    Freitag, 23. Dezember 2011 08:53