ASP.NET长期运行的任务思想
通常,我必须使用SQL server从asp.net站点向第三方会计系统发送数据,或从第三方会计系统发送数据。数据导入通常需要一段时间,我正试图找到处理长时间运行的任务的最佳方法,如果用户希望了解它的运行情况,可以更新用户。我的问题是,下面的方法有哪些优点和缺点,你推荐什么,为什么ASP.NET长期运行的任务思想,asp.net,azure-webjobs,Asp.net,Azure Webjobs,通常,我必须使用SQL server从asp.net站点向第三方会计系统发送数据,或从第三方会计系统发送数据。数据导入通常需要一段时间,我正试图找到处理长时间运行的任务的最佳方法,如果用户希望了解它的运行情况,可以更新用户。我的问题是,下面的方法有哪些优点和缺点,你推荐什么,为什么 旧式asp response.write:我实际上经常使用这个方法,目前它是我的go-to方法,因为它很快。我真的没有太多问题。我认为应用程序池的回收将是一个问题,但我认为它不会在请求中循环使用。 使用类似此处建议
- 旧式asp response.write:我实际上经常使用这个方法,目前它是我的go-to方法,因为它很快。我真的没有太多问题。我认为应用程序池的回收将是一个问题,但我认为它不会在请求中循环使用。
- 使用类似此处建议的IFrame:与上述方法类似,只是这是异步的。我不确定这是否允许asp.net重新启动
- 从站点调用web服务的单独windows应用程序:我使用了此方法,但设置需要更长的时间,当应用程序池回收时将停止运行。我可能不会使用这种方法
- Windows工作流:没有使用它,但看起来(特别是对于小数据更新)有些过分了
- Windows服务:同上。看起来太难了
- Ajax、独立线程和计时器轮询缓存结果:我也经常使用它,但如果应用程序池回收,这将停止,因为它位于asp.net不知道的独立线程上
只要您在HostingEnvironment.RegisterObject上对任务进行签名,池回收就不会侵入您的作业。如果作业需要几分钟以上的时间,我建议将作业添加到数据库中,在该数据库中,作业的状态可以由执行该工作的进程更新。您可以实现一个小型的命令行应用程序或Windows服务(它们实际上并不太糟糕,请参阅),用于监视数据库中的新作业。当它找到一个时,它会拿起它,并在运行时更新它的状态。可以将最终用户重定向到列出每个作业及其进度的页面。作业完成后,数据库行将更新,应用程序将等待新作业出现。对于WAWS,您可以使用Azure WebJobs。请参阅我的教程。在Azure上,您始终可以选择工作人员角色,Azure WebJobs提供了一种不带工作人员角色的WAWS替代方案。Windows Azure网站门户中的新WebJobs页面可轻松创建和管理按需、计划或连续运行的任务。关于ASP.NET中任务的权威文章是.Phils博客(上面引用)上的更多信息,但至少对于WAWS,这不再是事实,您可以拥有安全/受支持的长时间运行的进程。看见