杰夫之前在博客上发表了关于using the cache在他的网站上进行“带外”处理的博客,但是我想知道人们用什么其他技术来处理这些类型的任务?
答案 0 :(得分:7)
多年前,我看到Rob Howard描述了一种使用HttpModule在后台处理任务的方法。它看起来并不像使用Cache那样光滑,但在某些情况下可能更好。
This blog post 有详细信息,如果您环顾四周,还有许多其他信息可以捕获相同的信息。
答案 1 :(得分:4)
Windows服务
答案 2 :(得分:3)
您可能想看看DotNetNuke是如何做到的。我知道它是用VB.NET编写的,但我将代码改装成C#。我正在仔细阅读源代码,并注意到他们在管理区域中有一项功能来设置计划任务。这些任务通过管理界面进行设置并存储在数据库中。当站点启动时,通过Global.asax文件,他们要么创建另一个线程来运行此服务,然后在预定的时间运行计划任务。我不记得确切的逻辑,它已经有一段时间了,但它绝对是其他人如何为Asp.Net应用程序完成带外进程的一个很好的资源。这种技术仍然保留了Asp.Net应用程序中的逻辑,但在我看来,它在带外运行。
答案 3 :(得分:1)
如果它主要是数据处理任务并且您正在使用MSSQL,那么计划的SSIS任务如何?
答案 4 :(得分:1)
答案 5 :(得分:0)
计划任务或cron作业。
答案 6 :(得分:0)
计划任务或cron作业的问题在于它们不与Web服务器共享内存空间。您可以设置从Web服务器请求页面的计划任务,但这可能会导致长时间运行的任务出现问题。在实际的ASP.Net应用程序堆栈上运行一些低优先级线程来执行简单的实用程序任务(如清理缓存,监视资源以及处理常规内务管理)会很不错。
答案 7 :(得分:0)
简单队列文件以及单独的代理。对于每种类型的带外进程,编写一个单独的代理.exe,它监视目录中的队列文件,其中包含执行指定进程所需的任何数据。
这可能看起来很脏但是在现实世界中我发现它提供了很大的灵活性,你没有在ASP.net进程空间中进行大量处理,你可以很容易地将这种风格适应农场处理到便宜的Linux当您开始需要更多RAM / CPU /磁盘时,服务器在Mono上运行代理进程。
答案 8 :(得分:0)
如果您对asp.net页面最满意,可以编写一个小应用程序来处理您的工作,然后使用监控您网站的外部服务“ping”该应用程序。这将使应用程序保持活力。