"Недопустимое использование фильтра ответов" при сжатии ответа от 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);