«Неправильное использование фильтра ответов» при сжатии ответа от IHttpHandler - PullRequest
2 голосов
/ 25 января 2011

У меня есть 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

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

Что с этим?

Ответы [ 2 ]

1 голос
/ 26 ноября 2011

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

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

0 голосов
/ 03 октября 2011

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

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

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