2009-04-10 17 views
5

最初我試圖找出Response.Close和Response.End之間的區別是什麼,但在做了更多的搜索和研究之後,我清楚地知道我還沒有看到一個共同點方式一個字節[]被髮送回客戶端。我將在下面留下代碼示例,但我想知道這樣做的行業標準是什麼。ASP.NET如何流文件到用戶

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(); 

回答

15

我不會撥打Response.Close()Response.End()

Response.End()將停止該點處的頁面執行/渲染。將不會運行Response.End()之後的代碼。該響應在該點終止,不再向流輸出添加任何輸出。

Response.Close()Response.End()類似,但允許在調用代碼之後執行代碼(但不能在頁面響應中發送更多輸出)。

Response.Flush()將發送任何剩餘的響應項目到頁面。

IIS core team member

Response.Close發送一個復位包 客戶端,並用它在任何 不是錯誤狀態等會導致 到各種各樣的問題 - 例如,如果你 是與具有足夠延遲的客戶端交談時,重置分組可導致 在 上緩衝的任何其他響應數據在服務器,客戶端或 之間的某處被丟棄。

在這個特定的情況下,壓縮 涉及尋找響應和 響應的一些量已經由 壓縮碼進行緩衝內常見模式 到增加發現更長的重複 圖案的 機會 - 這一部分緩衝 不能發送到客戶端,一旦你 做Response.Close()。

總之,不要使用Response.Close()。

+0

感謝您的信息... – RSolberg 2009-04-10 15:43:27

相關問題