0

背景:我有一个 ASP.NET MVC Web 应用程序。我想定期捕获其用户可见的 HTML 内容并将其保存在某个地方,以便我可以跟踪内容如何随着时间的推移而演变。例如,我希望能够提取一年前存在的主页 HTML。这可以使用某种爬虫来完成,该爬虫会定期遍历 URL 列表。

我的问题:让网站本身发布HttpWebRequest到自己的 URL是否是个好主意?我可以Timer在 Web 应用程序内部启动一个每小时下载和存储一个 URL 的应用程序。

另一种架构是将爬虫放在外部应用程序(如 Windows 服务)中。不过,这将是一个复杂得多的架构。在这个问题中,我不想探索这个选项,因为我试图摆脱一个更简单的架构。

如果 ASP.NET 应用程序使用 请求自己的 URL,会出现什么问题HttpWebRequest

在伪代码中:

StartTimer(TimeSpan.FromHours(1), () => {
 var url = "http://localhost/SomePageInTheCurrentW3wpProcess.aspx";
 var data = new WebClient().DownloadString(url); //calling current application
 Persist(data);
});

我不确定会发生什么坏事。我正在考虑处理重入问题。我必须小心分布式死锁等。

4

1 回答 1

1

让网站本身向自己的 URL 发出 HttpWebRequests 是个好主意吗?

一点都不。跑步periodic background tasks in an ASP.NET application是一项危险的任务。如果你走这条路,很多你无法控制的事情可能会出错。Phil Haack 在他的博客文章中介绍了其中的大部分内容。最好在朝那个方向前进之前得到建议。

顺便说一句,如果托管的 Windows 服务对您来说架构过于复杂,那么一个简单的控制台应用程序计划使用定期运行的时间间隔就Windows Scheduler可以很好地满足要求,并且比您尝试使用 ASP.NET 来完成工作要好得多它不是为(例如执行定期后台任务)而设计的。

于 2013-01-27T15:49:16.103 回答