Kein Cache mit HttpClient in Windows Phone 8

7

Ich habe gelesen, dass ich, um das Caching bei Verwendung der Methoden get und post in HttpClient zu deaktivieren, ein WebRequestHandler als mein HttpClient 's HttpClientHandler verwenden und seine Cache-Richtlinie ändern muss. % Co_de% befindet sich jedoch nicht in System.Net.Http.dll, sondern in System.Net.Http.WebRequest.dll. Daher habe ich versucht, die DLL dem Projekt als Referenz hinzuzufügen. Ich habe eine Fehlermeldung erhalten:

  

Microsoft Visual Studio

     

Ein Verweis auf eine höhere Version oder inkompatible Assembly kann nicht sein   dem Projekt hinzugefügt.

Nach einer kurzen Suche kam ich zu dem Schluss, dass die DLL-Datei blockiert war, weil sie von einer anderen Quelle heruntergeladen wurde. Um es zu entsperren, versuchte ich die Lösung hier . Es funktionierte jedoch auch nicht und ich bekomme immer noch den gleichen Fehler, wenn ich versuche, die .dll-Datei als Referenz hinzuzufügen.

Alles was ich tun möchte, ist das Caching mit meinem HttpClient zu deaktivieren, mache ich hier irgendetwas falsch? Ich bin offen für jede Art von Rat oder Hilfe.

Mein System ist Windows 8.1 und ich verwende Visual Studio 2013. Das Projekt, an dem ich arbeite, ist eine Windows Phone 8-Anwendung. Das Verzeichnis von .dll, auf das ich zu verweisen versuche, ist "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Net.Http.WebRequest.dll". Vielen Dank im Voraus.

    
halileohalilei 15.01.2014, 10:05
quelle

5 Antworten

26

Es ist nicht möglich, auf reguläre .NET-Assemblys in einem Windows Phone 8-Projekt zu verweisen. Sie können nur die .NET-API für Windows Phone verwenden. Dies ist eine Teilmenge von regulären .NET. Weitere Informationen finden Sie Ссылка .

Das Standard-Caching von HttpClient (und HttpWebRequest) kann umgangen werden, indem ein Wert an die Abfragezeichenfolge angehängt wird. Zum Beispiel eine GUID.

%Vor%

Eine bessere Lösung, wie oben im Kommentar erwähnt, besteht darin, den Header "If-Modified-Since" zu setzen. HttpWebRequest hat es eingebaut:

%Vor%

Aber Sie könnten den Header manuell mit einem HttpClient hinzufügen, denke ich.

    
denniebee 21.01.2014, 10:51
quelle
8

Wenn Sie Windows.Web.Http.HttpClient verwenden, ist die Methode clean , um dieses Problem von der Clientseite aus zu beheben:

%Vor%

Auf diese Weise vermeiden Sie, den Cache der Anwendung mit temporären Abfragezeichenfolgen mit temporären Dateien zu füllen. Jede Antwort wird im Cache gespeichert.

Natürlich ist es immer empfehlenswert, das Problem von der Serverseite aus zu beheben. Fügen Sie den folgenden Header hinzu, und Sie müssen sich nicht um den Cache auf jedem Client kümmern:

%Vor%

Vollständige Antwort:

%Vor%     
kiewic 01.02.2015 19:07
quelle
7

Ich habe 3 Wege gefunden

  1. Fügen Sie am Ende Ihrer URI eine zufällige Abfrage-Zeichenfolge hinzu (think Guid.NewGuid ()). Dadurch wird das Caching auf dem Client vermieden, da die Abfrage-Zeichenfolge jedes Mal anders ist
  

string uri=" Ссылка " + Guid.NewGuid (). ToString ();

  1. Geben Sie in der OutgoingResponse-Kopfzeile innerhalb Ihrer WCF-Serviceoperation keinen Cache an:
%Vor%
  1. Markieren Sie Ihre Dienstoperation mit dem AspNetCacheProfile-Attribut:
%Vor%

Und aktualisieren Sie Ihre web.config

%Vor%
    
R00We 03.10.2014 11:57
quelle
5

Dies für Windows Phone, um neue Daten zu erhalten, anstatt Daten abzufangen

%Vor%

Eine andere Alternative ist eingestellt

%Vor%

in der Server-Seite Page_Load, wenn Sie Daten von der aspx-Seite erhalten

    
user1487912 20.08.2015 08:06
quelle
4

Ich habe eine HttpMessageHandler basierend auf der obigen Lösung geschrieben:

%Vor%

Verwenden Sie new HttpClient(new BypassCacheHttpRequestHandler(), true); , um Ihre HttpClient zu initialisieren, dann können Sie den Cache immer umgehen.

    
Simon Chan 01.09.2014 22:25
quelle

Tags und Links