当压缩来自IHttpHandler的响应时,“响应过滤器的使用无效”

问题描述:

我有一个IHttpHandler返回文件。当响应流被压缩,或者自动地使用Telerik的RadCompression或通过显式设置使用当压缩来自IHttpHandler的响应时,“响应过滤器的使用无效”

 
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 

如果我确保响应没有压缩,响应不包含异常。

这是怎么回事?

确保你没有阻止缓冲。显然,为了压缩响应,你必须允许它被缓冲。

即,下面两行的一个需要被删除:

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

这似乎与此有关:GZipStream is cutting off last part of XML

我删除了压缩模块,它似乎是所有现在好了。