Asp.NET MVC如何在动作执行结束前结束请求?

时间:2014-08-20 15:26:50

标签: asp.net-mvc asp.net-mvc-4

我的任务是在处理请求之前传递请求内容。 我怎么能这样做?

 public ActionResult UpdateRecord()
 {                        
        Response.Write("OK");
        Response.End();
        // I need to complete the request here and           
        // perform some action in the work thread
        Thread.Sleep(2000); 
        return Content("Something user never sees");
 }

1 个答案:

答案 0 :(得分:0)

请求结束后,您无法在同一请求中将内容发送回客户端。这是不可能的。

听起来我真正想要的是异步处理请求。这是您在一个请求中启动进程的位置,然后您将继续轮询服务器(刷新页面),直到请求完成。

这通常使用某种后台服务来完成,例如Message Queue或触发Windows服务处理某些内容的Web Service。在紧要关头,您可以使用计划任务,甚至是缓存删除回调技巧。

使用后台线程通常不会起作用,因为ASP.NET工作进程启动的线程在请求​​结束后终止。

如果您不想使用轮询,另一种可能性是使用像SignalR这样的推送服务来通知页面作业已经完成。

编辑:

好吧,正如我所说,你不能这样做。你必须将这项工作推进到某种后台进程,但是你不能剥离一个线程,因为一旦请求结束,线程就会被终止。

关于如何做到这一点,这里有很多问题(和答案),它们都归结为我上面提到的。计划任务,执行处理的Windows服务,缓存删除回调技巧等。您还可以使用WCF单向调用WCF服务或任何其他方式。