Es gibt merkwürdiges Verhalten beim Caching von Ausgaben in einer ASP.NET 4-Anwendung in IIS 7.5. Ich konnte das Problem einfach auf anderen leeren Setups wiederholen, ich bin mir sicher, dass dies ein Fehler ist, aber ich bin mir nicht sicher, wie ich es an Microsoft melden soll.IIS7.5 OutputCacheModule-Kernel-Caching 'public' Ignorieren der URL
Eine Website in IIS antwortet auf mehr als 1 Domäne, die .NET-Anwendung prüft den Hostnamen und erstellt den Inhalt entsprechend. Beispielsweise kann es den Name der Anforderungs-URL in einer leeren Seite drucken. ZB www.first-domain.com und www.second-domain.com
Die Datei web.config verfügt über das entsprechende Caching, urlCompression und httpCompression, die alle unter dem Knoten system.webServer deaktiviert sind.
Die aspx-Seite legt den Cache-Control-Header für public fest, entweder mit einem zukünftigen Datum für Verfallsdaten oder einem Höchstwert.
Wenn Sie www.first-domain.com besuchen, wird die Seite ausgegeben, die erfolgreich 'www.first-domain.com' geschrieben hat.
Wenn Sie jedoch www.second-domain.com aufrufen, wird eine Seite ausgegeben, die 'www.first-domain.com' schreibt.
Untersuchen der failed-request-traces, System.Web.Caching.OutputCacheModule hat die zwischengespeicherte Ausgabe gefunden (obwohl die .config-Dateien die Funktion deaktiviert haben), der Cache ist identisch, obwohl der Hostname der Anforderungs-URL unterschiedlich ist und daher gibt die zweite Anforderung die Ergebnisse der ersten Anforderung an die andere Domäne aus, solange das maximale Alter/Ablauf festgelegt wurde, bevor die richtige Seite für die zweite Domäne angezeigt wird.
Entweder die Einstellung cache-control auf private, oder das Entfernen des 'OutputCache' Moduls in der web.config löst das Problem, während die korrekten Cache-Control-Header an den Browser gesendet werden, aber offensichtlich kann ich keinen Vorteil daraus ziehen von Kernel-Caching, wenn ich es brauche.
Ich kann keine MSDN-Dokumentation finden, wie das OutputCacheModule konfiguriert ist.
Hat jemand anderes dieses Problem erlebt, wie kann ich das Kernel-Caching aktivieren und den URL-Hostnamen berücksichtigen (ohne die Anwendung auf verschiedene Sites in IIS zu trennen)?
Danke.
Update:
Hinzufügen SetSlidingExpiration hat keine Auswirkung, da der Kernal-Cache noch die Ausgabe unabhängig von der Anforderung Host-Namen-Caches. Das einzige Szenario besteht jetzt darin, das Ausgabe-Caching zu deaktivieren oder eine doppelte Instanz der Anwendung auf jeder ausgeführten Domäne auszuführen. Angesichts des Rückgangs der Serverleistung im Vergleich zur Leistungssteigerung bei der Verwendung des Ausgabecachings haben wir uns entschieden Deaktivieren der Ausgabezwischenspeicherung für diese App
Ich stehe vor einem sehr ähnlichen Problem.Hier jedoch bringt mich das Deaktivieren von Ausgabe und Kernel-Cache nur bis "Application_BeginRequest". Controller werden nicht aufgerufen, und benutzerdefinierte Header, die ich in "Application_BeginRequest" festgelegt habe, haben keine Auswirkungen. – Juliano