2011-12-05 3 views
3

데이터베이스 대기열에서 얻은 코드를 처리하기 위해 스레드가 응답하는 ASP.NET 웹 사이트가 있습니다.ASP.NET의 세션 및 스레드

Session에 액세스하거나 매개 변수로 전달할 수 있습니까? 그래서 캔트

답변

2

하면

내 현재 코드는 다음과 같습니다 당신의 일은 asp.net 쓰레드 외부에서 이루어지며, 그 세션을 사용할 수 있다고 가정하는 것이 안전하지 않을 수도 있습니다. 결정적 방법 만이 데이터를 스레드에 명시 적으로 전달하는 것입니다. 당신은 당신이 스레드 내에서 세션에 액세스 할 수 없습니다 named data slot

3

편집 그렇게 스레드에서 실행할 때

MediaJob nextJob = GetNextJobFromDB(); 

CreateMedia media = new CreateMedia(); 

Thread t = new Thread(new parameterizedThreadStart(media.DOSTUFF); 

t.Start(nextJob); 

HttpContext.Current.Session가 null :

HttpContext ctx = HttpContext.Current; 
Thread t = new Thread(new ThreadStart(() => 
       { 
        HttpContext.Current = ctx; 
        worker.DoWork(); 
       })); 
t.Start(); 
// [... do other job ...] 
t.Join(); 
+0

작성자는 새 스레드에서 'HttpContext.Current.Session'을 사용할 수 없다고 대답했습니다. –

+0

답안의 코드는이 단어의 단어와 일치합니다. http://stackoverflow.com/questions/8925227/access-httpcontext-current-from-threads – SpartaSixZero

+0

'Session'은 스레드 내에서 여전히이 접근법을 사용하여 null입니다. – mmcrae

0

에 데이터를 할당하여이 작업을 수행 할 수 있습니다,하지만 당신은 사용하여 데이터를 공유 할 수 : HttpRuntime.Cache

마음에 생각해야 할 몇 가지가 있습니다 : 세션과 달리 캐시는 만료됩니다. 또한 캐시는 모든 웹 사용자가 공유합니다.