Jeff 之前曾在博客中介绍过 使用缓存 在他的网站上执行“带外”处理,但是我想知道人们还使用哪些其他技术来处理此类任务?

有帮助吗?

解决方案

几年前,我看到 Rob Howard 描述了一种使用 HttpModule 在后台处理任务的方法。它看起来不像使用缓存那么灵活,但对于某些情况可能会更好。

这篇博文 有详细信息,如果你环顾四周,还有许多其他人可以捕获相同的信息。

其他提示

视窗服务

您可能想看看如何 点网核武器 可以。我知道它是用 VB.NET 编写的,但我将代码修改为 C#。我正在仔细阅读源代码,注意到他们的管理区域中有一个功能可以设置计划任务。这些任务通过管理界面进行设置并存储在数据库中。当站点启动时,他们通过 Global.asax 文件创建另一个线程来运行此服务,然后在计划的时间运行计划的任务。我不记得确切的逻辑了,已经有一段时间了,但它绝对是关于其他人如何为 Asp.Net 应用程序完成带外进程的很好的资源。这种技术仍然保留了 Asp.Net 应用程序中的逻辑,但在我看来它超出了带区范围。

如果主要是数据处理任务并且您使用的是 MSSQL,那么计划的 SSIS 任务怎么样?

计划任务,或 cron 作业。

计划任务或 cron 作业的问题在于它们不与 Web 服务器共享内存空间。您可以设置一个从 Web 服务器请求页面的计划任务,但这可能会导致长时间运行的任务出现问题。如果在实际的 ASP.Net 应用程序堆栈上运行一些低优先级线程来执行简单的实用程序任务(例如清理缓存、监视资源以及处理一般内务处理),那就太好了。

简单的队列文件以及单独的代理。对于每种类型的带外进程,编写一个单独的代理 .exe,它监视目录中的队列文件,其中包含执行指定进程所需的任何数据。

这可能看起来很脏,但在现实世界中,我发现它提供了很大的灵活性,您不需要在 ASP.net 进程空间中进行大量处理,并且您可以轻松地调整这种风格,将处理转移到运行 ASP.net 的廉价 Linux 服务器上。当您开始需要更多 RAM/CPU/磁盘时,Mono 上的代理进程。

如果您最熟悉 ASP.NET 页面,您可以编写一个小型应用程序来处理您的工作,然后使用监视您网站的外部服务“ping”该应用程序。这将使应用程序保持活力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top