[英]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.