ASP.NET Antwortfilterung und Nachcacheersetzung sind nicht kompatibel

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

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

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  1. Sie verfügen über eine ASP.NET Anwendung, die auf IIS 7.0 oder höher ausgeführt wird.
  2. Die Anwendung verwendet die Ersetzung nach dem Cache.
  3. Die Anwendung verwendet auch ein HTTP-Filtermodul (Hypertext Transfer Protocol), um gerenderten Inhalt herauszufiltern.

In diesem Szenario kann eines der folgenden Probleme auftreten:

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

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

    Ausnahmedetails: System.InvalidOperationException: Nach der Cacheersetzung 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 Struktur geändert, die einem Rückruf für verwaltete Postcacheersetzung zugeordnet ist, oder ein verwalteter Filter hat die Antwort geändert.

Ursache

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

Lösung

Um das Problem zu vermeiden, verwenden Sie eine der folgenden Optionen:

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

Weitere Informationen

Die Nachcacheersetzung 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 einem verwalteten Rückruf für HTTP_DATA_CHUNK die Nachcacheersetzung 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 Zwischenspeichern von Teilen eines ASP.NET Page.