2010-09-09 48 views
1

我有一個使用ASP.NET 4,MVC 2和AsyncController的長輪詢HTTP請求。如果用戶關閉他們的瀏覽器並且在沒有完成請求的情況下終止HTTP連接,我想知道它並完全清理它們。如果我不這樣做,那麼開放和不完整的請求就會坐在那裏,最終IIS會停止接受新的請求。ASP.NET - 在長時間運行的HTTP請求上捕獲客戶端斷開

通過製作一個具有Thread.Sleep的頁面的普通ASP.NET應用程序,可以模擬長時間運行的HTTP請求。即使您關閉瀏覽器,該請求也會繼續,就好像它沒有。

有一個名爲Response.IsClientConnected的屬性,如果客戶端斷開連接,它將切換爲false,我可以輪詢它以獲得所需的效果,但它不是很乾淨,我想避免輪詢。有沒有辦法在發生這種情況時得到通知,而不必輪詢此屬性?

感謝

回答

0

標準的方式來做到這一點是ClientDisconnected事件註冊一個回調。不幸的是,在ASP.NET中沒有這樣的事件,並且Response.IsClientConnected不可靠。也許這個破解有助於:

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

+0

這是令人失望的:)噢,我希望微軟在未來版本的ASP.NET中添加這樣的內容。謝謝! – Cameron 2010-10-15 13:13:46