3

我有一个 Web 应用程序,可以使用 Jeff Atwood 的帖子中描述的技术(黑客?)在我的本地机器上永久运行(至少几天):https ://blog.stackoverflow.com/2008/07/easy- aspnet 中的后台任务/

但是,当我在 App Harbor 上运行它时,我的应用程序不会运行超过一个小时左右(我不确定它什么时候死掉),只要我点击该站点它就会一直运行,所以我假设它被杀死了经过一段空闲时间,但我不知道为什么。

我的应用程序不保存任何状态或保留任何内容。它可以进行 Web 服务调用,并且在任何调用中都不会出现错误。

我打开了一个 ping 服务来保持我的应用程序活着,但我很好奇为什么这在我的本地机器上有效,但在 App Harbor 上无效?

4

2 回答 2

4

App Harbor 背后的人为所有正在运行的应用程序支付 EC2 实例费用,因此他们自然希望尽可能地限制 CPU 使用率。实现此目的的一种方法是非常快速地关闭未使用的应用程序,并且仅在有人实际尝试访问它们时才重新启动它们。付费托管不应以这种方式受到限制。

(据我所知,他们能够在不到 20 个中型实例上托管大约 10 万个站点,这当然令人印象深刻,并且需要非常经济地使用资源。)

要克服限制,您需要一个 cron 作业来 ping 您的应用程序港口站点。但这当然是一个非常递归的问题,因为您需要 app Harbor 充当 cron 作业;)

于 2013-08-06T17:24:07.773 回答
2

AppHarbor 会频繁回收应用程序池,以防止休眠的网站使用空闲的 CPU 时间。这只是您使用共享网站托管计划所付出的代价。

如果您真的想运行后台作业,那么您应该使用 AppHarbor 的后台工作人员,因为这正是它们被构建来运行的任务类型。

http://support.appharbor.com/kb/getting-started/background-workers

只需构建一个新的控制台应用程序来运行您的逻辑并将其包含在您的解决方案中。当您推送代码时,工作人员将自动启动。如果您的解决方案中碰巧已经有其他 exe,请确保编辑 app.config 并将“部署后台工作人员”的值设置为 false。

于 2013-08-18T19:15:43.087 回答