C# MVC 3-如何在异步WCF调用后立即重定向到操作

C# MVC 3-如何在异步WCF调用后立即重定向到操作,c#,asp.net-mvc,wcf,asp.net-mvc-3,asynchronous,C#,Asp.net Mvc,Wcf,Asp.net Mvc 3,Asynchronous,如何让MVCcontroller方法异步调用长时间运行的WCF任务,并在异步调用触发后立即重定向 我已经将我的WCF服务引用配置为“生成异步操作”,但是当调用该方法时,我可以在调试器中看到代码逐步通过并传递“RedirectToAction(“RedirectToActionTestCompleted”)”行,但浏览器在WCF任务完成之前不会重定向 public class HomeController : Controller { public ActionResult Index()

如何让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方法完成?

从AsyncController而不是控制器实现


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

异步方法的全部要点是它们不应该阻塞。您的测试方法不是异步的


使用真正的异步WCF调用和异步控制器=没有任何东西会阻塞。

如果要立即重定向,您对当前http请求中的WCF调用结果不感兴趣,对吗?如果这是真的,你可能想使用。它仍然会阻止,如果你真的不想阻止,即使是单向调用,你也可以-触发并忘记场景。

异步控制器也会阻止线程重定向。如果你想在重定向之前等待线程完成,那么为什么它是异步的?没有意义…最好同步。关键是我不想等待。它应该启动并忘记,但你说你想“完成后重定向”。这与你的上述说法相矛盾。对造成的混乱表示歉意。我想知道如何在异步调用被触发后立即重定向。@修复-好,这更有意义。是的,但是client.TestWcfCallAsync()不是异步的吗?如果不想等待,只需执行
ThreadPool.QueueUserWorkItem(state=>client.TestWcfCallAsync())。但请重命名它,因为它不是异步的。