文章出處

 

   不要使用Response.Close()

   不要使用Response.Close()

   不要使用Response.Close()

   

   1  因為:Close()方法會調用HttpWorkerRequest.CloseConnection()方法。終止(Terminate)與客戶端的套接字連接,并使得服務器,客戶端以及之間設施上的緩存(buffer)失效。導致發送到客戶端的數據丟失。

   

   2 方法Response.End()是為了兼容經典ASP程序,在Asp.NET 1.0中引入的,在調用后會拋出ThreadAbortException異常。成功時則中止(abort)當前的線程,處理管道觸發EndRequest事件,不再處理之后的代碼。會以同步的方式將響應內容發送(flush)給客戶端。

      由于.NET 設計原因,Response.End()在WebForm框架下可以終止代碼執行,不再處理End()之后的代碼。在MVC框架下則只是返回響應流,不會中止代碼執行。

     

   3 此外還可以使用HttpApplication.CompleteRequest()方法結束請求。

      Response.Flush();

      this.Context.ApplicationInstance.CompleteRequest();

   

   綜上所述:只有代碼發生錯誤(惡意的攻擊),希望終止對于客戶端的響應/連接時才可以使用Response.Close()

   如果你想結束請求,并向客戶端發送請求則應該優先使用HttpApplication.CompleteRequest()方法。

參考文章:

1 http://weblogs.asp.net/hajan/why-not-to-use-httpresponse-close-and-httpresponse-end

2 http://stackoverflow.com/questions/1886729/httpresponse-end-vs-httpresponse-close-vs-httpresponse-suppresscontent

3 http://www.cnblogs.com/v5wa/p/3165367.html


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()