2014-03-29 75 views
0

我正在寫一個網絡爬蟲,它必須擊中給定的URL列表。現在我必須創建一個Web界面來啓動並停止抓取工具模塊。C#Asp.Net通過其他Web請求取消長的Web請求

好吧,現在我可以通過簡單地發出Web請求來調用模塊(這肯定需要很長時間才能完成)。

現在的問題是,如何停止(或中斷)通過做出中止Web請求完成請求。 爲此第二個請求必須提供一個命令來首先請求停止,但是兩個請求如何能夠通信(或共享數據)。

即時懸掛在互聯網上幾天,但沒有找到任何關於這個問題的幫助,請你提供一些指針或其他方法。

回答

1

如果您有運行網絡爬蟲,(因爲它是醜陋的),最簡單的解決單臺服務器可能保持請求的靜態集合:

// assume the Request class contains the information necessary to cancel the request 
// e. g. the cancellation token 
private static readonly ConcurrentDictionary<Guid, Request> Requests = new ConcurrentDictionary<Guid, Request>(); 

當您初始請求啓動它可以爲該請求創建一個Guid鍵,並將長時間運行的請求存儲在靜態字典中。然後,您可以通過傳遞該密鑰來進行取消。您還需要確保在正常完成時(可能通過單獨的清理線程或等待請求完成的任務的延續)將請求從字典中刪除。

如果您有多個服務器,您仍可以使用此方法,但您需要一些解決方案來確定哪個服務器正在運行哪個請求(例如,存儲映射的數據庫或向所有服務器廣播中止請求的方法服務器)。

+0

請提供一些示例代碼。我不知道訪問不同的請求。非常感謝您的考慮。 –

+0

不錯的答案。你可以詳細闡述一下,或者你可以附加一些關於這方面的進一步研究的鏈接? – ManirajSS