Недопустимое использование фильтра ответа при сжатии ответа от IHttpHandler

У меня есть IHttpHandler, возвращающий файл. Когда поток ответа сжимается, либо автоматически с помощью Telerik RadCompression, либо путем явной установки фильтра с помощью

context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);

ответ, возвращенный браузеру, верен, но в конце ответа находится некоторый HTML. HTML содержит исключение:

[HttpException (0x80004005): Invalid use of response filter]
   System.Web.HttpResponseStreamFilterSink.VerifyState() +3928894
   System.Web.HttpResponseStreamFilterSink.Write(Byte[] buffer, Int32 offset, Int32 count) +28
   System.IO.Compression.DeflateStream.Dispose(Boolean disposing) +363
   System.IO.Stream.Close() +28
   System.IO.Compression.GZipStream.Dispose(Boolean disposing) +63
   System.IO.Stream.Close() +28
   System.IO.Compression.DeflateStream.Dispose(Boolean disposing) +595
   System.IO.Stream.Close() +28
   System.IO.Compression.GZipStream.Dispose(Boolean disposing) +63
   System.IO.Stream.Close() +28
   System.Web.HttpWriter.FilterIntegrated(Boolean finalFiltering, IIS7WorkerRequest wr) +754
   System.Web.HttpResponse.FilterOutput() +121
   System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +174

Если я убеждаюсь, что ответ НЕ сжат, ответ не будет содержать исключений.

Что с этим?


person mhenry1384    schedule 25.01.2011    source источник


Ответы (1)


Убедитесь, что вы не препятствуете буферизации. Очевидно, чтобы сжать ответ, вы должны разрешить его буферизацию.

То есть необходимо удалить одну из следующих двух строк:

context.Response.BufferOutput = false;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
person Lobstrosity    schedule 02.10.2011