背景:我有一个ASP.NET MVC网络应用程序。我想定期捕获其用户可见的HTML内容并将其保留在某个地方,以便我可以跟踪内容随时间的变化情况。我希望能够提取一年前存在的主页HTML。这可以使用某种定期遍历URL列表的爬虫来完成。
我的问题:将网站本身问题HttpWebRequest
发送到自己的网址是不是一个好主意?我可以在网络应用程序中启动Timer
,每小时下载并存储一个URL。
另一种体系结构是将爬网程序放在外部应用程序(如Windows服务)中。不过,这将是一个更复杂的架构。在这个问题中,我不想探索这个选项,因为我试图摆脱一个更简单的架构。
如果ASP.NET应用程序使用HttpWebRequest
请求自己的网址,会出现什么问题?
在伪代码中:
StartTimer(TimeSpan.FromHours(1), () => {
var url = "http://localhost/SomePageInTheCurrentW3wpProcess.aspx";
var data = new WebClient().DownloadString(url); //calling current application
Persist(data);
});
我不确定会发生什么坏事。我正在考虑解决重入问题。我必须小心分布式死锁等等。
答案 0 :(得分:1)
让网站本身向自己的网址发布HttpWebRequests是不是一个好主意?
不,一点也不。运行periodic background tasks in an ASP.NET application
是一项危险的任务。如果你走那条路,那么很多你无法控制的东西都会出错。 Phil Haack在他的博文中涵盖了大部分内容。在朝这个方向前做好之前最好先建议。
顺便说一下,如果托管Windows服务是一个太复杂的架构,一个简单的控制台应用程序计划使用Windows Scheduler
定期运行可以很好地适应这个法案,并且比你做得更好尝试将ASP.NET用于非设计用途(例如执行定期后台任务)。