Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET长期运行的任务思想_Asp.net_Azure Webjobs - Fatal编程技术网

ASP.NET长期运行的任务思想

ASP.NET长期运行的任务思想,asp.net,azure-webjobs,Asp.net,Azure Webjobs,通常,我必须使用SQL server从asp.net站点向第三方会计系统发送数据,或从第三方会计系统发送数据。数据导入通常需要一段时间,我正试图找到处理长时间运行的任务的最佳方法,如果用户希望了解它的运行情况,可以更新用户。我的问题是,下面的方法有哪些优点和缺点,你推荐什么,为什么 旧式asp response.write:我实际上经常使用这个方法,目前它是我的go-to方法,因为它很快。我真的没有太多问题。我认为应用程序池的回收将是一个问题,但我认为它不会在请求中循环使用。 使用类似此处建议

通常,我必须使用SQL server从asp.net站点向第三方会计系统发送数据,或从第三方会计系统发送数据。数据导入通常需要一段时间,我正试图找到处理长时间运行的任务的最佳方法,如果用户希望了解它的运行情况,可以更新用户。我的问题是,下面的方法有哪些优点和缺点,你推荐什么,为什么

  • 旧式asp response.write:我实际上经常使用这个方法,目前它是我的go-to方法,因为它很快。我真的没有太多问题。我认为应用程序池的回收将是一个问题,但我认为它不会在请求中循环使用。

  • 使用类似此处建议的IFrame:与上述方法类似,只是这是异步的。我不确定这是否允许asp.net重新启动

  • 从站点调用web服务的单独windows应用程序:我使用了此方法,但设置需要更长的时间,当应用程序池回收时将停止运行。我可能不会使用这种方法

  • Windows工作流:没有使用它,但看起来(特别是对于小数据更新)有些过分了

  • Windows服务:同上。看起来太难了

  • Ajax、独立线程和计时器轮询缓存结果:我也经常使用它,但如果应用程序池回收,这将停止,因为它位于asp.net不知道的独立线程上


这实际上是一个你希望执行的后台任务有多重要以及是什么触发了它的问题。 如果它是在每个已知间隔内发生的重复事件,我发现在应用程序线程(global.asax)上创建一个计时器最像下面的示例:

在ASP.NET中实现定期后台任务-

为了覆盖客户端,iframe可以做到这一点,但是Ajax请求将更加优雅


只要您在HostingEnvironment.RegisterObject上对任务进行签名,池回收就不会侵入您的作业。

如果作业需要几分钟以上的时间,我建议将作业添加到数据库中,在该数据库中,作业的状态可以由执行该工作的进程更新。您可以实现一个小型的命令行应用程序或Windows服务(它们实际上并不太糟糕,请参阅),用于监视数据库中的新作业。当它找到一个时,它会拿起它,并在运行时更新它的状态。可以将最终用户重定向到列出每个作业及其进度的页面。作业完成后,数据库行将更新,应用程序将等待新作业出现。

对于WAWS,您可以使用Azure WebJobs。请参阅我的教程。在Azure上,您始终可以选择工作人员角色,Azure WebJobs提供了一种不带工作人员角色的WAWS替代方案。Windows Azure网站门户中的新WebJobs页面可轻松创建和管理按需、计划或连续运行的任务。关于ASP.NET中任务的权威文章是.Phils博客(上面引用)上的更多信息,但至少对于WAWS,这不再是事实,您可以拥有安全/受支持的长时间运行的进程。看见