如何在.NET网站中创建一个一直在后台运行的线程?

5
我打算建立一个小型网站,每15分钟轮询第三方网络服务,并将收集到的数据存储在数据库中,通过网页显示结果。
我希望轮询可以在24小时内运行,无论是否有人访问该网站。
我知道我可以创建一个独立的应用程序来在服务器上运行这个任务,但是否有一种简洁的方式将其纳入网站代码中。我需要一些易于部署在廉价的第三方托管站点上的东西。
欢迎任何指向正确方向的指针。
谢谢。
2个回答

5

在您的网站项目中添加一个global.asax文件。

这将为您提供四个事件处理程序,其中一个用于应用程序加载时使用。

您可以在这里启动您的线程。

此外,我建议您将线程设置为后台,这样当您关闭Web应用程序时它们就会消失。

System.Threading.Thread.CurrentThread.IsBackground = true;

这个线程会受到自动网络服务器维护(线程/进程回收)的影响吗? - Tomalak
如果进程被回收,当应用程序重新启动时,线程将会触发。 - Spence
谢谢你的回答。看起来在使用廉价的第三方托管时没有完美的解决方案,但这对我的目的应该是可行的。 - Magpie

3
你最好创建一个Windows服务来完成这个任务。从应用程序启动中创建线程的另一个建议很好,但当你的Web服务器重新启动时,后台任务就不会被启动了,直到下一个人访问该站点为止。使用Windows服务,后台任务将在服务器启动后立即开始运行。
使用.net创建Windows服务相对简单,比以前容易得多:

http://www.codeproject.com/KB/system/WindowsService.aspx

你当然可以通过在服务器启动后运行某些内容来解决另一个问题,但这种方法很不专业,使用Windows服务是“正确”的方法。
编辑:
那就教训我吧,没有注意到问题中关于在便宜的共享主机上工作的要求。在这种情况下,另一种解决方案可能是你所能希望的最好解决方案,因为几乎肯定无法使用Windows服务方法。

感谢您的回答。虽然对我的问题不适用,但您仍然提供了一些非常有用的信息。 - Magpie
在 Windows 服务和 ASP.NET 应用程序同时运行时,是否可能让 Windows 服务更新 ASP.NET 应用程序中的设置? - Greg B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接