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

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

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

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

[HttpException (0x80004005): недопустимое использование фильтра ответов]
   System.Web.HttpResponseStreamFilterSink.VerifyState() +3928894
   System.Web.HttpResponseStreamFilterSink.Write(буфер Byte[], смещение Int32, число Int32) +28
   System.IO.Compression.DeflateStream.Dispose(логическое удаление) +363
   System.IO.Stream.Close() +28
   System.IO.Compression.GZipStream.Dispose(логическое удаление) +63
   System.IO.Stream.Close() +28
   System.IO.Compression.DeflateStream.Dispose(логическое удаление) +595
   System.IO.Stream.Close() +28
   System.IO.Compression.GZipStream.Dispose(логическое удаление) +63
   System.IO.Stream.Close() +28
   System.Web.HttpWriter.FilterIntegrated(логическое значение finalFiltering, IIS7WorkerRequest wr) +754
   System.Web.HttpResponse.FilterOutput() +121
   System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +174

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

Что с этим?

2 ответа

Похоже, это связано с этим: GZipStream обрезает последнюю часть XML

Я удалил модуль сжатия, и теперь все хорошо.

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

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

context.Response.BufferOutput = false;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
Другие вопросы по тегам