ASP.NET MVC5: вызов WCF блокирует поток - PullRequest
0 голосов
/ 27 ноября 2018

Задача: запустить долго работающий метод WCF, а затем вернуть JSON об успешном запуске.
Я пробовал Task.Run (как с прямым, так и с асинхронным вызовом) и HostingEnvironment.QueueBackgroundWorkItem, а на стороне WCF мы обнаруживаем запуск метода, все в порядке, но на стороне MVC действие выполняется намного дольше, чем нужно (например, несколько минут), как прямой вызов службы.

Итак, теперь такой код

public virtual JsonResult RunSomeTask(string data)
{
  Task.Run(() => ourService.LongRunningOne());
//or
  Task.Run(() => ourService.LongRunningOneAsync());
//or
  HostingEnvironment.QueueBackgroundWorkItem((ct) => ourService.LongRunningOne());
//or
  HostingEnvironment.QueueBackgroundWorkItem((ct) => {
    ourService.LongRunningOneAsync();
  });

  return Json(new{message = "started"});
}

, и он работает так, будто просто ожидает завершения вызова службы.
Что я делаю не так?

1 Ответ

0 голосов
/ 29 ноября 2018

В нашем случае это произошло из-за использования AutoFac , в котором службы настроены как InstancePerLifetimeScope(), поэтому в тех местах, где возникают проблемы (при вызове методов службы в Task.Run(), QueueBackgroundWorkItem и т. Д.), Мы простосоздание новых клиентов службы вручную (например, OurDataServiceClient), и тогда все работает.

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