2011-01-05 11 views
1

Ich habe eine asp.net-Seite erstellt, die ein Bild mit Response.BinaryWrite() zurückgibt. Das funktioniert gut, aber ich habe die folgende Frage.Stop WebPage-Processing

Ich rufe Response.BinaryWrite() im Page_PreLoad-Ereignis. Ich erwarte, dass asp.net mit der "normalen" Ausführung der Seite bis zum Unload Ereignis fortfährt, eine Menge Sachen tuend, die nicht mehr notwendig sind, weil die ganze gewünschte Operation bereits erledigt ist. Habe ich Recht, und wenn ja, gibt es eine Möglichkeit, asp.net zu sagen, dass eine weitere Verarbeitung für die Seite nicht mehr notwendig ist.

Update:

Danke für alle Antworten. Wie gesagt, ich habe einen ASHX-Handler benutzt, genau das, was ich brauchte. Danke an alle und +1 für alle Antworten dieser Richtung. Für alle, die die gleiche Frage haben wie ich, zeigt der Link von David Stratton eine sehr einfache Art und Weise, wie man es macht.

+0

Wow, waren wir alle schnell mit der Httphandler Idee zu kommen. – David

Antwort

10

Application.CompleteRequest() würde das für Sie tun.

Bewirkt, dass ASP.NET alle Ereignisse und Filter in der HTTP-Pipeline-Ausführungskette umgeht und das EndRequest-Ereignis direkt ausführt.

Es kann auf diese Weise von einer Page Klasse zugegriffen werden:

Context.ApplicationInstance.CompleteRequest(); 

Wenn Sie jedoch nur ein Bild zurückkehren möchten, sollten Sie einen HTTP-Handler (Klasse, die IHttpHandler implementiert) und nicht erschaffen Verwenden Sie eine Page. Siehe this MSDN-Artikel zum Erstellen von HTTP-Handlern.

+0

Ich kann Response.CompleteRequest nicht finden und ich weiß nicht, wie man auf die HttpApplication-Instanz zugreift, die verbundene msdn-description Erwähnungen (sorry die Frage, ich arbeite sehr selten mit asp.net). Kannst du mir sagen, wie ich darauf zugreifen kann? – HCL

+0

@HCL - Antwort aktualisiert. – Oded

2

Sie haben Recht. Aber Sie sollten kein Page verwenden, um ein Bild zurückzugeben. Verwenden Sie stattdessen eine HttpHandler.

1

Sie suchen Response.End().
Da Sie jedoch nicht das ASPX-Feature-Set verwenden, sollten Sie Ihren Code zu einem ASHX-Handler verschieben, der nichts von dem tut, was Sie überhaupt vermeiden möchten.
Sie würden dann Response.End nicht benötigen, und Sie würden bessere Leistung auch erhalten.

1

Dies ist keine direkte Antwort auf Ihre Frage, aber Sie können die Seite in eine ashx http handler ändern, um den Overhead des Seitenlebenszyklus loszuwerden, wenn Sie das wirklich versuchen.

http://support.microsoft.com/kb/308001

+0

+1 Danke für den Link, half mir sehr schnell. Ich habe jedoch die Antwort von oded angenommen, weil er auch den ersten Post beantwortet hat. Aber ich habe deine Aschx-Lösung benutzt. Danke vielmals. – HCL