.net 在MVC2应用程序中创建非阻塞进程

.net 在MVC2应用程序中创建非阻塞进程,.net,asp.net-mvc,asp.net-mvc-2,asynchronous,.net,Asp.net Mvc,Asp.net Mvc 2,Asynchronous,我面临着建立一个系统,允许用户: 点击一个按钮初始化一个“download&archive”命令,该命令通过XML读取文件列表,通过HTTP将文件拉到本地目录,对其进行归档,并将其存储起来以供下载 按下上述按钮后,立即获取一个进度条/指示器,告诉他们“请求正在处理” 能够提交另一个“下载和归档”命令,而无需等待以前的请求完成 随着每个“下载和归档”命令的完成,一个已完成归档的池应该会随着可供下载的新归档增加一个 我应该如何跟踪步骤1中发生的正在进行的流程,以及如何按照步骤2和步骤4的要求将适当的

我面临着建立一个系统,允许用户:

  • 点击一个按钮初始化一个“download&archive”命令,该命令通过XML读取文件列表,通过HTTP将文件拉到本地目录,对其进行归档,并将其存储起来以供下载
  • 按下上述按钮后,立即获取一个进度条/指示器,告诉他们“请求正在处理”
  • 能够提交另一个“下载和归档”命令,而无需等待以前的请求完成
  • 随着每个“下载和归档”命令的完成,一个已完成归档的池应该会随着可供下载的新归档增加一个
  • 我应该如何跟踪步骤1中发生的正在进行的流程,以及如何按照步骤2和步骤4的要求将适当的事件/消息传递回UI

    UI如何知道正在进行的流程?文件系统上的魔法文件夹和令牌?会话状态?由进程写入并由前端代码读取的数据库

    我想知道这是否是经常遇到的问题,是否有一种“标准的实现方式”

    仅供参考,我的堆栈是:

    • NET 4上的ASP.NET MVC 2
    • IIS 7
    • 用于.NET的外部7zip库

    在MVC控制器所在的客户端上,创建一个具有标识(很可能是GUID)的显式命令对象。然后通过生成新线程或通过ServiceBus向后端进程发送单向消息,并将命令Id返回到视图

    当后端进程工作时,视图可以轮询(使用JavaScript)URI的存在。 e、 g

    然后,您的后端进程可以使用JSON对象在文件系统上创建GUID.js,这些对象为您提供足够的信息来呈现进度更新

    当客户端轮询文件时,它将收到404,直到文件存在为止。当您收到一个200,您可以使用包含的JSON来呈现您的UI

    此解决方案可扩展且易于实现