如何让我的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方法完成?
答案 0 :(得分:1)
从AsyncController而不是Controller实现。
答案 1 :(得分:1)
使用像WF这样的工作流程解决方案。该页面可以启动工作流程并返回。然后,可以通过工作流管理WCF任务的执行。
答案 2 :(得分:1)
异步方法的重点在于它们不应该阻塞。您的测试方法不是异步的。
使用真正的异步WCF调用和异步控制器=什么都不会阻止。
答案 3 :(得分:1)
如果你想立即重定向,你对当前的http请求中的WCF调用结果不感兴趣,对吗?如果这是真的,您可能想要使用OneWay operation call。它仍然会阻止,如果你真的不想在OneWay电话上阻止,你可以start it asyncronously - 一劳永逸的场景。