簡體   English   中英

ASP.NET-在長時間運行的HTTP請求上捕獲客戶端斷開連接

[英]ASP.NET - Trapping client disconnections on long running HTTP requests

我有一個使用ASP.NET 4,MVC 2和AsyncController的長時間輪詢HTTP請求。 如果用戶關閉瀏覽器並在請求未完成的情況下終止了HTTP連接,那么我想了解一下並徹底清除它們。 如果我不這樣做,打開的請求和未完成的請求就坐在那兒,最終IIS停止接受新請求。

您可以通過使用帶有Thread.Sleep的頁面制作普通的ASP.NET應用程序來模擬長時間運行的HTTP請求。 即使關閉瀏覽器,該請求也會像沒有打開一樣繼續進行。

有一個名為Response.IsClientConnected的屬性,如果客戶端斷開連接,該屬性將切換為false,我可以對其進行輪詢以實現所需的效果,但它不是很干凈,我想避免輪詢。 有什么方法可以在發生這種情況時獲得通知,而不必輪詢該屬性嗎?

謝謝

執行此操作的標准方法是使用ClientDisconnected事件注冊回調。 不幸的是,ASP.NET中沒有這樣的事件,並且Response.IsClientConnected不可靠。 也許這個hack有幫助:

創建一個頁面,並強制客戶端通過很小的圖像(即1x1像素)或較小的幀來請求該頁面,並以特定的間隔(使用Javascript計時器)發送來自客戶端的請求。 該請求應確定誰是客戶端(使用clientId作為傳遞給頁面的參數)。 如果沒有來自客戶端的信號,則您的應用程序可能會將其視為已斷開連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM