asp.net 应用程序的“带外”处理技术
Posted
技术标签:
【中文标题】asp.net 应用程序的“带外”处理技术【英文标题】:"Out of Band" Processing Techiniques for asp.net applications 【发布时间】:2010-09-07 18:06:40 【问题描述】:Jeff 之前曾在博客中提到 using the cache 在他的网站上执行“带外”处理,但我想知道人们使用哪些其他技术来处理此类任务?
【问题讨论】:
【参考方案1】:Windows 服务
【讨论】:
【参考方案2】:计划任务,或 cron 作业。
【讨论】:
【参考方案3】:几年前,我看到 Rob Howard 描述了一种使用 HttpModule 在后台处理任务的方法。它看起来不像使用缓存那么流畅,但在某些情况下可能会更好。
This blog post 有详细信息,如果您环顾四周,还有许多其他信息可以捕获相同的信息。
【讨论】:
【参考方案4】:如果主要是数据处理任务并且您使用的是 MSSQL,那么计划的 SSIS 任务如何?
【讨论】:
【参考方案5】:计划任务或 cron 作业的问题在于它们不与 Web 服务器共享内存空间。您可以设置一个从 Web 服务器请求页面的计划任务,但这可能会给长时间运行的任务带来问题。如果在实际的 ASP.Net 应用程序堆栈上运行一些低优先级线程来执行简单的实用程序任务,例如清理缓存、监视资源以及处理一般的内务管理,那就太好了。
【讨论】:
【参考方案6】:您可能想看看DotNetNuke 是如何做到的。我知道它是用 VB.NET 编写的,但我将代码改造成 C#。我正在仔细阅读源代码,并注意到他们在管理区域中有一个功能来设置计划任务。这些任务通过管理界面进行设置并存储在数据库中。当站点启动时,通过 Global.asax 文件,他们要么创建另一个线程来运行此服务,然后在其预定时间运行预定任务。我不记得确切的逻辑,已经有一段时间了,但它绝对是其他人如何为 Asp.Net 应用程序完成带外进程的一个很好的资源。这种技术仍然保留了 Asp.Net 应用程序中的逻辑,但在我看来它超出了范围。
【讨论】:
【参考方案7】:简单的队列文件以及单独的代理。对于每种类型的带外进程,编写一个单独的代理 .exe,它会监视队列文件的目录,其中包含执行指定进程所需的任何数据。
这可能看起来很脏,但在现实世界中,我发现它提供了很大的灵活性,您不会在 ASP.net 进程空间中进行大量处理,并且您可以轻松地将这种样式用于农场处理到廉价的 Linux当您开始需要更多 RAM/CPU/磁盘时,服务器在 Mono 上运行代理进程。
【讨论】:
【参考方案8】:如果您对 asp.net 页面最满意,您可以编写一个小应用程序来处理您的工作,然后使用监视您网站的外部服务“ping”该应用程序。这将使应用程序保持活力。
【讨论】:
【参考方案9】: 使用http://www.codeproject.com/KB/cs/tsnewlib.aspx 或schtasks.exe 的计划任务。 Quartz.NET MSMQ SQL 服务器jobs Windows service System.Threading.Timer 或 System.Timers.Timer System.ComponentModel.BackgroundWorker Asynchronous 调用和回调【讨论】:
以上是关于asp.net 应用程序的“带外”处理技术的主要内容,如果未能解决你的问题,请参考以下文章
带外通道(OOB)Bind XML外部实体注入漏洞:PayPal案例研究
使用 app.useSpa() 并处理 404 的 Asp.Net Core
asp.net 一般处理程序(ashx)如何多次接收上传文件(多文件批量上传)