Asp.net mvc 2 我可以在以下场景中使用异步控制器吗?

Asp.net mvc 2 我可以在以下场景中使用异步控制器吗?,asp.net-mvc-2,polling,long-running-processes,asynccontroller,Asp.net Mvc 2,Polling,Long Running Processes,Asynccontroller,我在Asp.net MVC中有一个应用程序,我希望在某个时候向用户显示一个模式对话框,该对话框将显示流程执行进度指示器 幕后的流程执行大量数据库数据处理(基于现有数据,它生成大量结果记录,并将这些记录写回数据库)。这个过程可能需要很短的时间到很长的时间(取决于现有数据) 应用程序将异步启动此过程(通过Ajax请求),并以相同的方式显示进度 问题 我读过一些关于异步控制器的文章,在异步控制器中,可以异步启动进程并通知进程结束,但没有进度指示,我也不确定浏览器超时是如何处理的。就客户端而言,异步请求

我在Asp.net MVC中有一个应用程序,我希望在某个时候向用户显示一个模式对话框,该对话框将显示流程执行进度指示器

幕后的流程执行大量数据库数据处理(基于现有数据,它生成大量结果记录,并将这些记录写回数据库)。这个过程可能需要很短的时间到很长的时间(取决于现有数据)

应用程序将异步启动此过程(通过Ajax请求),并以相同的方式显示进度

问题 我读过一些关于异步控制器的文章,在异步控制器中,可以异步启动进程并通知进程结束,但没有进度指示,我也不确定浏览器超时是如何处理的。就客户端而言,异步请求与同步请求是相同的。因此,客户机将等待响应(据我所知)。主要区别在于服务器将以异步方式执行某些内容,因此不会阻止其他传入请求。我实际上应该做的是:

  • 发出一个请求,该请求将启动流程并响应已启动的客户端taht流程
  • 客户机将定期轮询服务器,以获取即时响应,返回百分比值(可能为JSON)
  • 当进度达到100%时,这意味着它结束了,这样客户就知道要请求结果了
  • 我不相信异步控制器是这样工作的

    问题是,我不确定我是否理解异步控制器,因此不确定应该使用哪种方法来解决刚才描述的问题?我自己也看到了两种可能性:

  • Asp.net MVC异步控制器(如果可以这样工作)
  • Windows服务应用程序,可根据请求处理数据并报告其进度-此服务将通过使用正常控制器操作将特定记录写入数据库来启动;这将启动它,然后服务将其进度状态写入数据库,这样我的Asp.net MVC应用程序就可以在客户端进程轮询请求时读取它

  • 我自己在项目中没有使用过异步控制器。然而,这里有一个链接,链接到一个曾经有过的人

    我个人曾在一个大型生产项目中使用过2号

    第二个是一个服务应用程序,运行在一个单独的服务器上,使用OpenSSH在两个服务器之间进行通信。我们会定期轮询进度,通过AJAX将进度条更新到客户端UI

    此外,通过将web服务器与长时间运行的流程分离,您可以分离您的关注点。您的web服务器对将文件写入磁盘、处理IO等不感兴趣,因此不应该承担这样的负担

    如果长时间运行的进程必须终止或失败,那么这不会影响web服务器处理请求和处理事务

    另一个建议是,对于一个非常长的运行过程,不要让客户承担等待的负担,让他们可以选择稍后再来查看进度。即,完成后向他们发送电子邮件


    或者实际向他们展示一些有趣的东西,在我们的例子中,我们有一个签名的Java小程序,精确地展示了他们在那个时刻的流程。

    基于我自己的知识和经验。问题是,我不确定这是否是正确的方法…我已经更新了我的问题有一些额外的信息供你考虑。我在项目中还没有使用过自动控制器。然而,这里有一个链接,链接到一个曾经有过的人。另一方面:我还在生产环境中使用#2生成非常大的报告。我不知道一个异步控制器如何处理如此长而密集的请求。哦,是的。Link与我到目前为止所做的非常相似。我不使用异步控制器,但我使用
    BeginInvoke
    对长时间运行的进程使用池线程。