Frage

Haben Sie etwas seltsames Verhalten in Bezug auf die Ausgabezwischenspeicherung in einer ASP.NET-4-Anwendung auf IIS 7.5. Ich habe in der Lage, das Problem einfach auf anderen leeren Setups zu wiederholen, ich bin sicher, dass dies ein Fehler ist, aber noch nicht sicher, wie es zu Microsoft melden.

Eine Website in IIS reagiert auf mehr als 1 Domain, examins die .NET-Anwendung die Hostnamen und erzeugt dementsprechend Inhalt. Zum Beispiel kann es den Namen der Anforderungs-URL in einer leeren Seite drucken. ZB www.first-domain.com und www.second-domain.com

Die web.config hat die entsprechende Caching, urlCompression und httpCompression alle unter dem system.webServer Knoten ausgeschaltet.

Die aspx Seite setzt den Cache-Control-Header für öffentliche, mit entweder einem späteren Zeitpunkt für abläuft oder einen max-age-Wert.

Zu Besuch www.first-domain.com gibt die Seite, die erfolgreich schreibt 'www.first-domain.com'.

Allerdings besuchen www.second-domain.com gibt eine Seite, schreibt 'www.first-domain.com'.

Die Untersuchung der failed-Anfrage-Spuren hat System.Web.Caching.OutputCacheModule die zwischengespeicherte Ausgabe gefunden (obwohl die CONFIG-Dateien die Funktion ausgeschaltet haben), hat der Cache angepasst, obwohl die URL Hostnamen unterschiedlich sind, und damit die zweite Anforderung ausgeben wird die Ergebnisse der ersten Anfrage an die anderen Domäne, solange der max-age / Ablauf wurde eingestellt für, bevor die richtige Seite für die zweite Domäne werden angezeigt.

So oder das Einstellen von Cache-control an privaten oder Entfernen des ‚Outputs‘ Modul in der web.config löst das Problem, während des richtigen Cache-Control-Header an den Browser gesendet beibehalten, aber natürlich kann ich nicht nutzen Kernel-Caching, wenn ich es brauche.

Ich kann keine MSDN-Dokumentation finden, wie die OutputCacheModule konfiguriert ist.

Hat sonst noch jemand dieses Problem erfahren, wie kann ich mich über Kernel-Caching aktivieren und lassen Sie es in Betracht ziehen URL Hostname (ohne die Anwendung zu verschiedenen Standorten in IIS Trennung).

Danke.

Update:

SetSlidingExpiration Hinzufügen hat keine Auswirkung, da der Kernal-Cache noch die Ausgabe unabhängig von der Anforderung Host-Namen-Caches. Das einzige Szenario nun entweder deaktivieren Ausgabe-Caching ist, oder eine doppelte Instanz der App auf jeder Domain führen Sie es laufen - den Rückgang der Serverleistung unter Berücksichtigung dieser gegen die Erhöhung der Leistung bei der Verwendung Ausgabe Caching gewonnen führen würde, haben wir beschlossen, zu deaktivieren Ausgabe-Caching für diese App.

War es hilfreich?

Lösung

Keine Antwort wird nach 9 Monaten zur Verfügung gestellt worden, und keine Lösung gefunden wurde, nur eine Behelfslösung, vielleicht wird dies in der nächsten Version von IIS größer festgelegt wird als 7,5 ...

-

SetSlidingExpiration Hinzufügen hat keine Auswirkung, da der Kernal-Cache noch die Ausgabe unabhängig von der Anforderung Host-Namen-Caches. Das einzige Szenario nun entweder deaktivieren Ausgabe-Caching ist, oder eine doppelte Instanz der App auf jeder Domain führen Sie es laufen - den Rückgang der Serverleistung unter Berücksichtigung dieser gegen die Erhöhung der Leistung bei der Verwendung Ausgabe Caching gewonnen führen würde, haben wir beschlossen, zu deaktivieren Ausgabe-Caching für diese App.

Andere Tipps

Ich war ein sehr ähnliches Problem haben und keine Lösungen hier hat mir geholfen.

TLDR :. Gewaltsam das OutputCache Modul auf dem Web.config Entfernen die einzige Lösung wurde gefunden:

war mein Szenario ein wenig anders.

Ich habe CORS in Application_BeginRequest einrichten, die Beantwortung Access-Control-Allow-Origin für bestimmte Hosts, rufen Sie mich an (es * Einstellung nicht zuverlässig gewesen).

My-Controller setzt auch Cache-control: public für seine Antworten.

Was ich gefunden

Jedes Mal, wenn ich Cache-control: public gesetzt, IIS-Caches mit Gewalt die Antwort. Haltepunkte auf beide Application_BeginRequest oder meinem Controller betroffen waren nie ein zweites Mal.

Die Deaktivieren Ausgang und Kernel-Caching über die IIS-Manager als gesehen unterhalb hätte ich die Application_BeginRequest Haltepunkte schlagen, aber nie ich in den Controller. Etwas war noch Antworten Caching. gesperrter Ausgang Caching und Kernel-Caching auf inetmgr

Dieser Artikel schlug der Outputmodul von IIS zu entfernen würde helfen.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="OutputCache" />
  </modules>
</system.webServer>

Damit konnte ich mein Controller treffen, endlich.

Was würde dazu beitragen, noch mehr

Wenn jemand von MS oder nicht konnte ein Licht leuchten, ob es einen Weg gibt, dieses Verhalten zu ändern. Output könnte in einigen Teilen einer Anwendung und unnötig in anderen nützlich sein.

Achtung:

Vielleicht bin ich (wir sind?) Hier das falsche Problem zu lösen.

Vielleicht wurde unter IIS über Caching in diesem Szenario, da es sollte. Vielleicht wäre das genau wie in diesem genauen Szenario Proxies auf dem Weg zwischen meinem Server und dem Benutzer verhalten, und wenn das der Fall ist dann um diesen auf IIS arbeitet, ist falsch. Ich werde auf Figur haben, dass und vielleicht Sie sollten auch.

Ich habe ähnliches Problem. Ich benutze benutzerdefinierte URL rewriter. Ich habe Seiten example.com/articles und example.com/art-ANY_ID.html. Beide url Karte articles.aspx (in zweiten Beispiel als articles.aspx? Id = ANY_ID). Es funktionierte gut mit ASP.NET 2.0 und Classic-Pipeline-Modus. beide url Rückkehr identisch Ausgang: Nachdem wir es auf ASP.NET 4 und integrierten Modus geändert haben, haben wir eine merkwürdiges Verhalten bekommen. Es war jede Seite wie example.com/art-ANY_ID.html.

Nun entfernt man <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> aus dem Abschnitt <caching enabled="true" enableKernelCache="true"> und es gut funktioniert. Ich nicht verstehen, warum http.sys Cache es.

Haben Sie irgendwelche Erklärungen finden?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top