ASP.NET antwortfilterung und nach dem Cacheersetzung sind nicht kompatibel

Dieser Artikel hilft Ihnen, das Problem zu beheben, das verursacht wird, wenn Sie die Antwortfilterung und die Ersetzung nach dem Cache gleichzeitig verwenden.

Ursprüngliche Produktversion:   Internetinformationsdienste 7.0 und höher
Ursprüngliche KB-Nummer:   2014472

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  1. Sie haben eine ASP.NET auf IIS 7.0 oder höher ausgeführt.
  2. Die Anwendung verwendet die Nach-Cache-Ersetzung.
  3. Die Anwendung verwendet auch ein Http-Filtermodul (Hypertext Transfer Protocol), um gerenderte Inhalte herausfiltern.

In diesem Szenario kann eines der folgenden Probleme auftreten:

  • Wenn die Anwendung auf IIS7 im klassischen Pipelinemodus gehostet wird, werden die Ersetzungsblöcke nur bei der ersten Anforderung gerendert. Nachfolgende Seitenzugriffe führen dazu, dass die gesamte Seite aus dem Ausgabecache bedient wird und die Ersetzungsblöcke nicht aktualisiert werden.

  • Wenn die Anwendung auf IIS7 im integrierten Pipelinemodus gehostet wird, tritt eine Ausnahme vom Typ mit System.InvalidOperationException den folgenden Details auf:

    Ausnahmedetails: System.InvalidOperationException: Die Ersetzung nach dem Cache ist nicht kompatibel mit Modulen in der integrierten IIS-Pipeline, die die Antwortpuffer ändern. Entweder hat ein systemeigenes Modul in der Pipeline eine HTTP_DATA_CHUNK einem verwalteten Rückruf nach dem Cacheersetzungsrückruf geändert, oder ein verwalteter Filter hat die Antwort geändert.

Ursache

Die Antwortfilterung und die Ersetzung nach dem Cache sind nicht kompatibel.

Lösung

Verwenden Sie eine der folgenden Optionen, um das Problem zu vermeiden:

  • Deaktivieren Sie die Ausgabe zwischenspeicherung auf Seiten, die Ersetzungsblöcke verwenden.
  • Verwenden Sie nicht das Antwortfiltermodul.

Weitere Informationen

Die Post-Cache-Ersetzung wird mithilfe einer Liste von Ersetzungsblöcken (.NET-Delegaten) implementiert, die zum Rekonstruieren einzelner Teile der Antwort verwendet werden. ASP.NET verwaltet intern eine Liste der Strukturen, die HTTP_DATA_CHUNK einem verwalteten Post-Cache-Ersetzungsrückruf zugeordnet sind. Wenn ein Antwortfilter verwendet wird, wird eine unformatierte Antwort in einem einzelnen Puffer gerendert, und die Liste der Ersetzungsblöcke geht verloren. Daher können die Ersetzungsblöcke nicht gerendert werden. Weitere Informationen zum Ersetzen nach dem Cache finden Sie unter Zwischenspeichernvon Teilen einer ASP.NET Seite .