![GoDaddy 共享主机 ASP.NET 4.0 中应用程序池启动时自动启动计时器](https://linux22.com/image/797619/GoDaddy%20%E5%85%B1%E4%BA%AB%E4%B8%BB%E6%9C%BA%20ASP.NET%204.0%20%E4%B8%AD%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%B1%A0%E5%90%AF%E5%8A%A8%E6%97%B6%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%E8%AE%A1%E6%97%B6%E5%99%A8.png)
我有一个 GoDaddy 共享主机方案,并且有多个 ASP.NET 4.0 网站。我有一些类似 cronjob 的功能,可以每 5 分钟执行一次与 Web 相关的任务。我已将带有计时器的初始化逻辑放入我的 Global.asaxApplication_Start
方法中。我的任务在服务器处于活动状态时(例如发出请求)工作,但我遇到了一个问题:每当我的应用程序被回收时,我的计时器都不会被注册,因为Application_Start
在发出请求之前不会调用它。我没有活动站点,我不能依靠对我的站点发出的请求来启动我的应用程序。我搜索并找到了自动启动模块这很好,但由于我使用的是共享主机(而且 GoDaddy 在解决客户问题方面并不是一个客户友好的公司),我无法使用此模块,因为它需要在机器/IIS 级别安装。应用程序初始化模块也。
如何在共享托管环境中回收后自动启动我的应用程序而无需等待外部请求?
答案1
让 Pingdom 等外部服务以您想要的时间间隔向您的网站发送请求。只需确保它实际上是对 URL 的 HTTP GET 请求。这应该会强制服务器运行该应用程序。
最后:更换您的网络托管提供商,这将为您省去很多麻烦。我个人推荐 DiscountASP.net。美国和欧洲的 Windows 托管服务既好又便宜。
答案2
您可以随时在任务计划程序中运行 powershell 命令来 ping 所需的 URL,以保持 IIS 应用程序池处于唤醒状态。