3

ファイルを返す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(Boolean finalFiltering、IIS7WorkerRequest wr)+754
   System.Web.HttpResponse.FilterOutput()+121
   System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+174

応答が圧縮されていないことを確認した場合、応答には例外が含まれていません。

どうしたの?

4

1 に答える 1

0

バッファリングを妨げていないことを確認してください。どうやら、応答を圧縮するには、バッファリングできるようにする必要があります。

つまり、次の 2 行のいずれかを削除する必要があります。

context.Response.BufferOutput = false;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
于 2011-10-02T20:38:51.927 に答える