【发布时间】:2011-03-16 01:57:53
【问题描述】:
大家好,我正在尝试在我的网站上创建一个类似于网络爬虫的网络应用。我已经完成了几乎所有的代码来进行爬网,但我仍然需要亲自去网页激活代码。有什么方法可以让我的 ASP.NET 代码每天在服务器上自动执行一次? (如果这有什么不同,我正在使用 Godaddy)
谢谢
【问题讨论】:
大家好,我正在尝试在我的网站上创建一个类似于网络爬虫的网络应用。我已经完成了几乎所有的代码来进行爬网,但我仍然需要亲自去网页激活代码。有什么方法可以让我的 ASP.NET 代码每天在服务器上自动执行一次? (如果这有什么不同,我正在使用 Godaddy)
谢谢
【问题讨论】:
您不想要“页面”,您想要预定的控制台应用程序或 Windows 服务。根据设计,页面是可请求的服务器资源。 (查看 RESTful 设计。)它意味着由来自客户端的请求调用,可能执行一些服务器端逻辑,并向该客户端返回响应。故事结束。
我想,您的网站可能会在应用程序启动时产生某种线程。不过,对我来说似乎有点骇人听闻。但是,如果这是您与托管服务提供商的唯一选择,那么这可能确实是您的选择。 (尽管您仍然必须至少调用一次页面才能启动它。)但是,理想情况下,您希望由站点本身之外的应用程序或 Windows 服务处理一个持续的进程。
(如果您确实使用在应用程序启动时产生的线程,请注意可能导致应用程序重新启动的各种事情。一旦启动,这并不意味着它会一直运行。任何更改配置文件,更改某些项目类型中的页面或代码,IIS 想要释放资源并感觉像重新启动池等)
【讨论】:
最好的方法是不使用网页,而是创建一个具有满足您需要的方法的类,并从 global.asax 文件中的 Application_OnStart 事件调用它。然而,代码可能每天被访问不止一次。但是,如果您使用的是数据库,则可以保留一个配置值,以说明进程运行的最后一天。然后仅在当前日期不等于上次运行日期时运行。
【讨论】:
为您的目的计划执行网页并不理想,但是:
如果您愿意随时打开浏览器,可以将其放在标题中:
<script type="text/javascript">
<!--
var timer = setInterval("autoRefresh()", 1000 * 60 * 1440);
function autoRefresh(){self.location.reload(true);}
//-->
</script>
或者,您可以在 *nix 服务器上创建一个 cron 作业来每天调用您的页面:
* 0 * * * /usr/local/bin/curl --silent --compressed http://www.domain.com/page
【讨论】: