2014-03-29 71 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