Asp.net mvc 4 在.NETMVC4中使用get/id对post运行后台进程并轮询状态

Asp.net mvc 4 在.NETMVC4中使用get/id对post运行后台进程并轮询状态,asp.net-mvc-4,c#-4.0,iis,Asp.net Mvc 4,C# 4.0,Iis,我有一个页面,将提交一些数据处理服务器通过张贴。然后,页面将拉动服务器查看处理状态,直到通过get请求完成处理。处理完成后,get请求将结果返回到页面 问题是ASP中有哪些框架可用于此目的?我不想让请求等待处理完成(没有异步控制器)。该页面将定期轮询服务器的状态和结果 我看到的另一个问题是进程的状态和结果必须存储在轮询之间。除了设置一些外部数据存储来保存轮询之间的信息外,还有其他选择吗?e、 g.在IIS的工作进程中暂时保存数据的某种方式,因为从API控制器访问会话时需要跳转环 问题是ASP中有

我有一个页面,将提交一些数据处理服务器通过张贴。然后,页面将拉动服务器查看处理状态,直到通过get请求完成处理。处理完成后,get请求将结果返回到页面

问题是ASP中有哪些框架可用于此目的?我不想让请求等待处理完成(没有异步控制器)。该页面将定期轮询服务器的状态和结果

我看到的另一个问题是进程的状态和结果必须存储在轮询之间。除了设置一些外部数据存储来保存轮询之间的信息外,还有其他选择吗?e、 g.在IIS的工作进程中暂时保存数据的某种方式,因为从API控制器访问会话时需要跳转环

问题是ASP中有哪些框架可用于此目的

没有框架可以做到这一点。你必须自己实施它。如果您决定反过来,即使用推送通知而不是定期轮询,您可能会签出Signaler。否则,您将不得不处理服务器上的新线程

除了设置一些外部数据存储,还有其他选择吗 在两次投票之间保留信息?e、 g.以某种方式暂时保持 IIS工作进程中的数据,因为需要跳转 从API控制器访问会话


不,没有。将这些信息存储在内存中是一件可怕的事情。这在web场中永远不会起作用,而且不要忘记IIS可能会在任何时候决定回收应用程序池,从而杀死迄今为止存储在内存中的所有内容。实现这一点的唯一可靠方法是拥有一个集中的数据存储,该数据存储将在web场的节点之间共享。

我们使用ajax调用来实现这一点。把它放在jquery计时器中,每隔30秒或您设置的任何时间向服务器发出一个调用,一旦它成为现实,您可以重新加载,返回一个部分,类似这样的结果,这是一个可靠的方法。在我的情况下,虽然我们是一个单页应用程序,所以没有重新加载。当我研究这个问题时,似乎我可以在会话中存储数据。虽然使用ViewState的pass项目让我有点偏执。幸运的是,对我来说,处理的结果不需要是持久的,一旦发送到客户端,它就可以被删除。当我们扩展到这个演示应用程序之外,并且数据需要持久化时,我们将使用SQLServer20*或任何已经存在的存储。线程本身不是问题,我担心的是,一旦请求返回状态,它们可能会被中止。这些都是我们希望在SO上发布时能够找到真相的更高层次的问题。是的,在这种情况下,最好使用WebSocket和推送通知。它们正是为此目的而设计的。线程中的长时间运行操作在web应用程序中是一个很大的禁忌,这仅仅是因为您在评论中概述的原因->它们不可靠,并且没有任何东西可以保证您启动的后台线程将永远完成。但是,如果改为将请求推送到DB,然后由服务处理并推送结果返回到数据库,get请求在其中运行查询以返回数据,这样就可以了。重点是,对于一个演示,我不会构建一个完整的体系结构。取而代之的是,我需要的填充将被替换为实际的模式。如果这是一个演示,那么不要担心。只需旋转一个新线程并将信息存储在内存中。我以为你在问一个真实的应用程序,在这个应用程序中,我会使用更优化的技术,比如WebSocket,它正是为这些目的而设计的。