ASP.NET MVC5:WCF调用锁定线程

时间:2018-11-27 11:54:06

标签: c# asp.net-mvc wcf

任务:启动长期运行的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 :(得分:0)

在我们的案例中,这是由于使用 AutoFac 而发生的,在该服务中,服务配置为InstancePerLifetimeScope(),因此在出现问题的地方(在Task.Run()中调用服务方法时, QueueBackgroundWorkItem等),我们只是手动创建新的服务客户端(例如OurDataServiceClient),然后一切正常。