我有一个网络应用程序将使用杰夫阿特伍德的帖子中描述的技术(黑客?)在我的本地计算机上永远运行(至少几天):http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/
然而,当我在App Harbour上运行时,我的应用程序运行时间不超过一个小时左右(我不确定它什么时候会死)只要我点击网站它就会停留,所以我假设它在闲置期间被杀,但我不确定原因。
我的应用不保存任何状态或保留任何内容。它可以在任何调用中进行Web服务调用并保持错误。
我启用了ping服务以保持我的应用程序处于活动状态,但我很好奇为什么这可以在我的本地计算机上运行但不适用于App Harbor?
答案 0 :(得分:3)
App Harbor背后的人为所有正在运行的应用程序支付EC2实例,因此他们自然希望尽可能地限制CPU使用率。实现此目的的一种方法是非常快速地关闭未使用的应用程序,并仅在有人实际尝试访问它们时重新启动它们。付费托管不应以这种方式受到限制。
(据我所知,他们能够在不到20个中型实例上托管大约10万个网站,这当然令人印象深刻,需要非常经济地使用资源。)
要克服此限制,您需要一个cron作业来ping您的应用港口网站。但这当然是一个相当递归的问题,因为你需要app harbour作为一个cron工作;)
答案 1 :(得分:2)
AppHarbor经常回收应用程序池,以防止睡眠网站使用空闲的CPU时间。这只是您使用共享网站托管计划所支付的价格。
如果您真的想要运行后台工作,那么您应该使用AppHarbor的后台工作人员,因为这正是他们为运行而构建的任务类型。
http://support.appharbor.com/kb/getting-started/background-workers
只需构建一个运行逻辑的新控制台应用程序,并将其包含在您的解决方案中。当您按下代码时,工作人员将自动启动。如果您的解决方案中已经有其他exe,请确保编辑app.config并将“deploy background worker”值设置为false。