MVC 3 - Как RedirectToAction сразу после асинхронного вызова WCF - PullRequest
2 голосов
/ 09 июня 2011

Как мне заставить мой метод 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 ]

1 голос
/ 10 октября 2012

Если вы хотите перенаправить немедленно, вас не интересует результат вызова WCF в текущем HTTP-запросе , верно?Если это так, вы можете использовать вызов операции OneWay .Он по-прежнему будет блокироваться, и если вы действительно не хотите блокировать даже при вызовах OneWay, вы можете запустить его асинхронно - сценарий «забей и забудь».

1 голос
/ 09 июня 2011

Используйте решение рабочего процесса, такое как WF. Страница может просто запустить рабочий процесс и вернуться. Затем выполнение задачи WCF может управляться рабочим процессом.

1 голос
/ 09 июня 2011

Весь смысл асинхронных методов в том, что они не должны блокироваться.Ваш метод тестирования не асинхронный.

Используйте истинный асинхронный вызов WCF, и асинхронный контроллер = ничего не заблокирует.

1 голос
/ 09 июня 2011

Реализация из AsyncController вместо контроллера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...