任务:启动长期运行的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"});
}
,就像等待服务调用结束一样。
我在做什么错了?
答案 0 :(得分:0)
在我们的案例中,这是由于使用 AutoFac 而发生的,在该服务中,服务配置为InstancePerLifetimeScope()
,因此在出现问题的地方(在Task.Run()
中调用服务方法时, QueueBackgroundWorkItem等),我们只是手动创建新的服务客户端(例如OurDataServiceClient
),然后一切正常。