C#Asp.Net通过其他Web请求取消长Web请求

时间:2014-03-29 14:07:53

标签: c# httpwebrequest

我正在编写一个网页抓取工具,必须点击给定的网址列表。现在我必须创建一个Web界面来启动并停止爬虫模块。

现在好了,我可以通过简单地发出一个Web请求来调用该模块(这肯定需要很长时间才能完成)。

现在的问题是如何通过发出中止Web请求来停止(或中断)完成请求。 为此,第二个请求必须提供第一个请求停止的命令,但两个请求如何通信(或共享数据)。

我在网上闲逛几天但没有找到任何关于这个问题的帮助,请你提供一些指示,或者一些替代方法。

1 个答案:

答案 0 :(得分:1)

如果您有一台运行Web爬虫的服务器,那么最简单的解决方案(实际上很难看)可能会维护一组静态请求:

// 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密钥,并将长时间运行的请求存储在静态字典中。然后,您可以通过该密钥进行将来的请求以进行取消。您还需要确保请求在正常结束时从字典中删除(可能通过单独的清理线程或等待请求完成的任务的继续)。

如果您有多台服务器,您仍然可以使用这种方法,但是您需要一些解决方案来确定哪个服务器正在运行哪个请求(例如,用于存储映射的数据库或将中止请求广播的方式所有服务器)。