7 Stimmen

Wie HttpWebRequest zu zwingen, Cache in ASP.NET-Umgebung verwenden?

In meiner ASP.NET-Anwendung verwende ich HttpWebRequest zum Abrufen externer Ressourcen, die ich im Cache speichern möchte. Betrachten Sie den folgenden Code:

var req = WebRequest.Create("http://google.com/");
req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable);
var resp = req.GetResponse();
Console.WriteLine(resp.IsFromCache);
var answ = (new StreamReader(resp.GetResponseStream())).ReadToEnd();
Console.WriteLine(answ.Length);

HttpWebRequest verwendet IE-Cache, so dass, wenn ich es als normaler Benutzer (in winzigen cmd Test app) ausführen, Daten in den Cache gespeichert werden %userprofile%\Local Settings\Temporary Internet Files und die nächsten Antworten werden aus dem Zwischenspeicher gelesen.

Ich dachte, wenn solcher Code innerhalb einer ASP.NET-Anwendung ausgeführt wird, werden die Daten in den Cache ...\ASPNET\Local Settings\Temporary Internet Files aber das ist nicht der Fall und der Cache wird nie benutzt.

Was mache ich falsch? Wie HttpWebRequest zu zwingen, Cache in ASP.NET-Umgebung verwenden?

0 Stimmen

Unter welchem Konto wird Ihre ASP.NET-Anwendung ausgeführt? Der Cache wird unter diesem Konto erstellt.

0 Stimmen

@feroze: Die Anwendung läuft unter dem ASPNET-Konto und ich kenne den Pfad zu den temporären Internetdateien, indem ich Environment.SpecialFolder.InternetCache untersuche. Das Problem ist nicht, dass ich nicht weiß, wo die Cache-Einträge erstellt werden, sondern dass sie überhaupt nicht erstellt werden.

0 Stimmen

Können Sie eine Zeile hinzufügen, um das Response-Objekt zu schließen und zu entsorgen: resp.Close(); und dann überprüfen, ob die Probleme weiterhin bestehen?

1voto

MUG4N Punkte 18661

Sie können den Cache wie folgt manuell in Ihrem Code verwenden:

 Cache.Insert("request", req, Nothing, DateTime.Now, TimeSpan.FromSeconds(30), TimeSpan.Zero)

Sie können diese Methode wie die Caching-Methode in der web.config verwenden.

0 Stimmen

Ich werde wahrscheinlich am Ende implementieren benutzerdefinierte Cache, aber ich war für einige geradlinige "out of the box" Lösung gehofft ...

0 Stimmen

Ich denke, es gibt keine Patentlösung für Ihr Problem, aber es sollte kein großes Problem sein, dies zu implementieren.

1voto

Dan Mork Punkte 1749

Ich weiß, dass dies ein altes Thema ist, aber ein weiterer Punkt, der bei diesem Problem zu beachten ist, sind die IE-Sicherheitseinstellungen für das Benutzerkonto, unter dem die ASP.NET-Anwendung ausgeführt wird. Die HTTP-Zwischenspeicherung (CachePolicy.Level = Default, HTTP cacheable resources) funktionierte bei unserer Anwendung nicht, bis wir den Remote-Host zur Liste der vertrauenswürdigen Sites hinzugefügt haben.

Dieser Artikel war für unsere Cache-Fehlersuche sehr hilfreich: http://blogs.msdn.com/b/ieinternals/archive/2011/03/19/wininet-temporary-internet-files-cache-and-explorer-folder-view.aspx

0voto

Sky Sanders Punkte 34472

Ich könnte mich irren, aber ich würde vermuten, dass HttpWebRequest respektiert die Cache-Kopfzeilen der Ressource ungeachtet der von Ihnen angegebenen Wünsche.

Überprüfen Sie die Antwort-Header und stellen Sie sicher, dass die Ressource nicht ausdrücklich verlangt, nicht zwischengespeichert zu werden.

1 Stimmen

Ich vermutete, Header zu, so dass ich eine winzige cmd app bauen, die httprequest auf die gleiche Ressource macht. In cmd app ist es zwischengespeichert. Und in ASP.NET app ist es nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X