我使用異步XMLHttpRequest來調用ASP.net web服務中的函數。
當我在XMLHttpRequest上調用abort方法時,服務器收到請求並處理它後,服務器繼續處理請求。
有沒有辦法停止服務器上的請求處理?在asp.net上處理XMLHttpRequest中止
回答
一般來說,不可以,一旦服務器啓動,您就無法停止正在處理的請求。畢竟,服務器如何知道請求何時被中止?
這就像是你導航到一個網頁,但在第一個加載之前瀏覽到另一個網頁。最初的要求至少在某種程度上(任何客戶端工作當然不會發生)都會得到滿足。
如果您確實希望停止服務器上的長時間運行操作,則需要調用正在調用的服務,以便它可以支持被中斷。一些僞代碼:
void MyLongRunningMethod(opId, args)
{
work = GetWork(args)
foreach(workItem in work)
{
DoWork(workItem)
//Has this invocation been aborted?
if(LookUpSet.Contains(opId))
{
LookUpSet.Remove(opId)
return
}
//Or try this:
if(Response.IsClientConnected)
{
HttpContext.Current.Response.End();
return;
}
}
}
void AbortOperation(opId)
{
LookUpSet[opId] = true
}
所以這裏的想法是,MyLongRunningMethod
定期檢查,看它是否已被中止,返回如果是這樣。它的目標是opId
是唯一的,所以你可以基於當前時間附加的客戶端的會話Id或其他東西(在Javascript中,new Date().getTime()
將得到自時代以來的毫秒數)生成它。
通過這種方法,服務器必須保持狀態(在我的示例中爲LookUpSet
),因此您需要一些方法來完成此操作,例如數據庫或將其存儲在內存中。該服務還需要進行架構設計,以便中止調用不會使事情處於非工作狀態,這當然非常依賴於它的功能。
另一個非常重要的要求是數據可以分成幾塊並分塊工作。這就是允許服務中斷的原因。
最後,如果某個操作要中止,那麼必須調用AbortOperation
- 只需中止XMLHttpRequest調用就不會有幫助,因爲操作將一直持續到完成。
編輯
從這個問題:ASP.Net: How to stop page execution when browser disconnects?
你也可以檢查Response.IsClientConnected
屬性,嘗試確定調用是否已經中止。
一般而言,服務器在嘗試向其發送數據之前不會知道客戶端已斷開連接。見Best practice to detect a client disconnection in .NET?和Instantly detect client disconnection from server socket。
由於nick_w寫道,您無法停止服務器啓動後處理的請求。但有能力實施解決方案,這將使您能夠取消服務器任務。迪諾·埃斯波西託有這樣的事情如何可以實現幾大文章: Canceling Server Tasks with ASP.NET AJAX
而在下面的文章,以實現集中到服務器恐龍埃斯波西託介紹如何使用SignalR庫: Build a Progress Bar with SignalR; Long Polling and SignalR
所以,如果你真的需要取消服務器上的一些任務,這些文章可以作爲實施所需解決方案的起點。
- 1. XmlHttpRequest不終止請求處理
- 2. 處理的XMLHttpRequest在scrapy
- 3. 正在中止xmlhttprequest
- 4. 在asp.net頁面上處理()
- 5. ASP.NET處理突然停止在IIS 6.0上
- 6. 如何處理304 XMLHttpRequest中未修改
- 7. XMLHttpRequest的內部`onbeforeunload`處理器在Opera
- 8. 處理在ASP.NET
- 9. 在javascript中停止處理
- 10. 在asp.net中處理外鍵
- 11. 在asp.net中處理頁面
- 12. 在ASP.NET Core中處理ILoggerFactory
- 13. 在asp.net中處理異常
- 14. 在ASP.NET中處理路線
- 15. 在ASP.NET MVC中處理XML
- 16. 防止濫用ASP.net處理程序
- 17. 中止處理CATiledLayer?
- 18. 處理併發和中止上傳,codeigniter
- 19. MissingMemberException在ultrawebgrid上未處理asp.net
- 20. 如何處理jSON XMLHttpRequest響應?
- 21. 處理多個XMLHttpRequest調用f
- 22. 如何在json中處理外來字符XMLHttpRequest
- 23. 如何通過refreshDiv在PHP中正確處理對象XMLHttpRequest
- 24. 如何在PhantomJS中處理XMLHttpRequest異常101錯誤?
- 25. 中止BGSAVE已在處理中
- 26. asp.net批處理
- 27. ASP.NET MVC處理
- 28. XmlHttpRequest PUT文件上傳停止> 1MB
- 29. 處理ASP.NET MVC中的autopostback
- 30. ASP.NET中的URL處理WebForms
我不明白。 XMLHttpRequest等待來自服務器的響應,這就是在處理請求期間連接沒有終止的原因。當請求被中止時,連接被終止,所以服務器應該知道它。 我錯過了什麼嗎? – Andy
@安迪見我的編輯 –