6

最初は、Response.Close と Response.End の違いを理解しようとしていましたが、さらにグーグルと調査を行った後、Byte[] がクライアントに送り返される一般的な方法を見たことがないことが明らかになりました。以下にコード サンプルを残しておきますが、これを行うための業界標準が何であるかを知りたいと思います。

Byte[] myBytes = GetReportBytes();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AppendHeader("content-length", myBytes.Length.ToString());
HttpContext.Current.Response.AppendHeader("content-Disposition", "attachment;filename=" + this.ReportFileName + GetReportExtension());
HttpContext.Current.Response.ContentType = GetApplicationContentType();
HttpContext.Current.Response.BinaryWrite(myBytes);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
//CERT FIX
//HttpContext.Current.Response.End();
4

1 に答える 1

17

Response.Close()またはに電話しませんResponse.End()

Response.End()その時点でページの実行/レンダリングを停止します。以下のコードResponse.End()は実行されません。応答はその時点で終了し、それ以上の出力はストリームに追加されません。

Response.Close()に似てResponse.End()いますが、呼び出し後にコードを実行できます (ただし、ページ応答でそれ以上の出力を送信することはできません)。

Response.Flush()残りの応答アイテムをページに送信します。

IIS コア チーム メンバーから:

Response.Close はリセット パケットをクライアントに送信しますが、エラー状態以外でそれを使用すると、あらゆる種類の問題が発生します。たとえば、十分な遅延があるクライアントと通信している場合、リセット パケットによって他の応答データがバッファリングされる可能性があります。サーバー、クライアント、またはその間のどこかでドロップされます。

この特定のケースでは、圧縮には応答内の共通パターンの検索が含まれ、より長い繰り返しパターンを見つける可能性を高めるために、圧縮コードによってある程度の応答をバッファリングする必要があります。 Response.Close() を実行します。

つまり、Response.Close() を使用しないでください。

于 2009-04-10T01:26:42.390 に答える