MVC 컨트롤러에서 장기 실행 프로세스를 시작한 다음 즉시 사용자에게 반환하여 다른 장기 실행 프로세스를 시작할 수 있습니다. 나는 아약스를 통해이 작업을 수행 할 것입니다.하지만 실제 시스템에서 값을 읽어야 만 3 초 이내에 작업을 계속할 수 있습니다. 유일한 문제는 작업의 메서드가 더 이상 사용할 수없는 세션의 값을 읽는 것입니다. StructureMap과 함께 사용할 사용자 세션 값을 가진 HttpContext를 만드는 방법이 있습니까?MVC3 (StructureMap)의 백그라운드 작업에서 세션에 액세스하는 방법
아래는 작업
System.Threading.Tasks.Task async = new System.Threading.Tasks.Task(() =>
{
var response = service.LongRunningTask(request, weight);
this.requestCache.Insert("someKey", 120, response);
});
async.Start();
되고 세션이 읽을 때 오류가 일어나는 곳이다
registry.For<IPrintService>().HybridHttpOrThreadLocalScoped().Use(() =>
{
var profiler = ServiceLocatorManager.Current.Resolve<IProfiler>();
return new PrintService(AppSettings.PrintDirectly, SessionWrap.UseLabelPrinter, SessionWrap.UsePrinter, profiler) as IPrintService;
});
IoC 컨테이너에서 IPrintService를 요청하는 방법은 무엇입니까? – StriplingWarrior
다른 클래스에 삽입 된 생성자 인수를 통해 요청됩니다. –
다른 클래스는 무엇입니까? 내가 묻는 이유는 순수한 생성자 삽입을 사용하고 있다면 컨트롤러가 생성 될 때 바인딩 메소드가 실행될 것이고'service.LongRunningTask'를 호출 할 때가 아니라는 것이다. 따라서 SessionWrapper에 액세스하는 것은 작업이 생성되기 전에 발생합니다. – StriplingWarrior