MVC 3 - 如何在异步WCF调用后立即RedirectToAction

时间:2011-06-09 03:02:25

标签: c# asp.net-mvc wcf asp.net-mvc-3 asynchronous

如何让我的MVCcontroller方法异步调用长时间运行的WCF任务,并在异步调用被触发后立即重定向?

我已经将我的WCF服务引用配置为“生成异步操作”但是当调用该方法时,我可以在调试器中看到代码逐步执行并且传递“RedirectToAction(”RedirectToActionTestCompleted“)”行,但浏览器在WCF任务完成之前不会重定向。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult About()
    {
        return View();
    }

    public ActionResult RedirectToActionTest()
    {
        Service1Client client = new Service1Client();
        client.TestWcfCallAsync();
        return RedirectToAction("RedirectToActionTestCompleted");
    }

    public ActionResult RedirectToActionTestCompleted()
    {
        return View();
    }
}

和WCF服务方法

public void TestWcfCall()
{
    Thread.Sleep(30000); //30 seconds
}

为什么网页等待WCF方法完成?

4 个答案:

答案 0 :(得分:1)

从AsyncController而不是Controller实现。

http://msdn.microsoft.com/en-us/library/ee728598.aspx

答案 1 :(得分:1)

使用像WF这样的工作流程解决方案。该页面可以启动工作流程并返回。然后,可以通过工作流管理WCF任务的执行。

答案 2 :(得分:1)

异步方法的重点在于它们不应该阻塞。您的测试方法不是异步的。

使用真正的异步WCF调用和异步控制器=什么都不会阻止。

答案 3 :(得分:1)

如果你想立即重定向,你对当前的http请求中的WCF调用结果不感兴趣,对吗?如果这是真的,您可能想要使用OneWay operation call。它仍然会阻止,如果你真的不想在OneWay电话上阻止,你可以start it asyncronously - 一劳永逸的场景。