none
Win Phone 8 Webclient RRS feed

  • Frage

  • Hi

    Habe ein Problem mit dem WebClient in der Win Phone API V8:

    Das Programm mit dem Codeausschnitt funktioniert beim ersten Aufruf, aber bei jedem weiteren Aufruf ist das Ergebnis (e.result) dasselbe. Nur Stoppen und wieder starten liefert ein neues Ergebnis. Das hat wahrscheinlich mit dem Browser Cache zu tun. Dasselbe Kommando im IE10 manuell gegeben liefert immer korrekte aktuelle Ergebnisee.

    Codeausschnitt:

     

            private bool GetWebResults(string sURI)
            {
                try
                {
                    Uri sysURI = new Uri(sURI);

                    if (NetWorkAvailable(sURI))
                    {
                        if (client.IsBusy) return false;
                        {
                            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCallback);
                            client.DownloadStringAsync(sysURI);                   
                        }
                        return true;
                    }
                    return true;
                }
                catch (System.InvalidOperationException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    if (debug) MessageBox.Show(ex.ToString(), "Error", MessageBoxButton.OK);
                    return false;
                }
            }

            private void DownloadStringCallback(Object sender,                          // Evaluate results from Web
                                                DownloadStringCompletedEventArgs e)
            {
                string WebResult = "";                                                      // WebResult

                try
                {
                    WebResult = (string)e.Result;

    ... Visualisieren von "WebResult ....

                    client.DownloadStringCompleted -= DownloadStringCallback;
                    return;
                }
                catch (Exception ex)
                {
                    if (debug) MessageBox.Show(ex.ToString(), "Error", MessageBoxButton.OK);
                }
                finally
                {
                    client.DownloadStringCompleted -= DownloadStringCallback;
                }
            }

    Kennt jemand das Problem?

    Hans-Joachim


    Hans-Joachim Mundt mailto: hans-j.mundt@live.de

    Donnerstag, 27. Dezember 2012 18:32

Antworten

  • Ja, der Webserver ist bestimmt OK, das Problem liegt ja an dem Cachingverhalten der WebClient Klasse, welches sich nicht wirklich umgehen lässt. Aber mit dem Workaround ruft man ja keine andere URL auf, sondern die gleiche und sendet halt Parameter mit, damit die URL immer anders aussieht. Die Webseite muss die Parameter natürlich ignorieren, dann sollte es klappen. Ansosnten gibt es natürlich die Alternative die HttpWebRequest Klasse zu verwenden.

    http://patrickgetzmann.wordpress.com/

    • Als Antwort vorgeschlagen PeterNowak Freitag, 28. Dezember 2012 16:48
    • Als Antwort markiert HansBacNet Freitag, 28. Dezember 2012 17:16
    Freitag, 28. Dezember 2012 16:09

Alle Antworten

  • Freitag, 28. Dezember 2012 10:10
  • Hallo Patrick,

    leider nicht, auch wenn ich zwischendurch eine ganz andere URL lese (die dann auch die Daten liefert) wird bei erneuter Abfrage wieder der Cache ausgegeben.

    Der Webserver ist OK, da ich mit einer Windows Modern UI Anwendung, dort immer korrekte Antworten bekomme.

    Hans-Joachim


    Hans-Joachim Mundt mailto: hans-j.mundt@live.de

    Freitag, 28. Dezember 2012 15:03
  • Ja, der Webserver ist bestimmt OK, das Problem liegt ja an dem Cachingverhalten der WebClient Klasse, welches sich nicht wirklich umgehen lässt. Aber mit dem Workaround ruft man ja keine andere URL auf, sondern die gleiche und sendet halt Parameter mit, damit die URL immer anders aussieht. Die Webseite muss die Parameter natürlich ignorieren, dann sollte es klappen. Ansosnten gibt es natürlich die Alternative die HttpWebRequest Klasse zu verwenden.

    http://patrickgetzmann.wordpress.com/

    • Als Antwort vorgeschlagen PeterNowak Freitag, 28. Dezember 2012 16:48
    • Als Antwort markiert HansBacNet Freitag, 28. Dezember 2012 17:16
    Freitag, 28. Dezember 2012 16:09
  • Ja, der Workaround mit dem Timestamp funktioniert.

    Hans-Joachim Mundt mailto: hans-j.mundt@live.de

    Freitag, 28. Dezember 2012 17:17