Ich habe einen HttpHandler, den ich verwende, um bestimmte Bilder auf der Website eines Kunden zu behandeln. Wenn ich den Bildstrom an das Antwortobjekt ausgabe und Flush gelegentlich anrufe, wird ein Fehler ausgelöst. Hier ist ein CodeblockResponse.Flush() löst System.Web.HttpException aus
var image = Image.FromStream(memStream);
if (size > -1) image = ImageResize.ResizeImage(image, size, size, false);
if (height > -1) image = ImageResize.Crop(image, size, height, ImageResize.AnchorPosition.Center);
context.Response.Clear();
context.Response.ContentType = contentType;
context.Response.BufferOutput = true;
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
context.Response.Flush();
context.Response.End();
Von dem, was ich gelesen habe, ist diese Ausnahme von einem Client Trennen verursacht, bevor der Prozess abgeschlossen ist, und es gibt nichts zu spülen.
ist hier eine Ausgabe meiner Fehlerseite
System.Web.HttpException: An error occurred while communicating with the remote host. The error code is 0x80070057.
Generated: Mon, 12 Oct 2009 03:18:24 GMT
System.Web.HttpException: An error occurred while communicating with the remote host. The error code is 0x80070057.
at System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.FlushCore(Byte[] status, Byte[] header, Int32 keepConnected, Int32 totalBodySize, Int32 numBodyFragments, IntPtr[] bodyFragments, Int32[] bodyFragmentLengths, Int32 doneWithSession, Int32 finalStatus, Boolean& async)
at System.Web.Hosting.ISAPIWorkerRequest.FlushCachedResponse(Boolean isFinal)
at System.Web.Hosting.ISAPIWorkerRequest.FlushResponse(Boolean finalFlush)
at System.Web.HttpResponse.Flush(Boolean finalFlush)
at System.Web.HttpResponse.Flush()
at PineBluff.Core.ImageHandler.ProcessRequest(HttpContext context) in c:\TeamCity\buildAgent\work\79b3c57a060ff42d\src\PineBluff.Core\ImageHandler.cs:line 75
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
context.Response.Flush fällt in Zeile 75.
Gibt es eine Möglichkeit, dies zu überprüfen, bevor ohne den Flush Durchführung es in einem Versuch Einwickeln/Fangblock.
so konnte ich meine .Flush() und .End() in einer .IsClientConnected wickeln und dass mein Problem automatisch beheben denken Sie? Die Kunden des Kunden erhalten den Fehler nicht auf ihren Bildschirmen, ich bekomme jedes Mal E-Mails von ELMAH. Nur ein kleiner Ärger mehr als alles andere. –
Sie könnten den .Flush in die Prüfung einpacken - nicht zu sicher über irgendwelche Auswirkungen des Nicht-Aufrufs .End ... Ich nehme an, es gibt einen lang andauernden Prozess, der dazu führt, dass Leute die Verbindung trennen, bevor Sie das Bild fertig haben. –
Ich kann bestätigen, dass das Wrapping innerhalb einer .IsClientConnected die gleiche Ausnahme auslösen kann; ist mir gerade passiert. Bleiben Sie bei .End() – Contra