Benutzer mit den meisten Antworten
WebClient.DownloadFile liefert alten Stand

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
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
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.
-
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
-
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 -
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 -
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 -
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
-
Hallo Florian.H,
Schon versucht die XML-Datei mit der WebClient.DownloadStringAsync Methode (Uri) herunterzuladen?
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
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. -
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
-
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
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.- Bearbeitet Robert BreitenhoferModerator Freitag, 23. Dezember 2011 08:47