2011-12-05 29 views
3

我有一個ASP.NET網站,其中一個線程負責做一些從數據庫隊列中取回的代碼。ASP.NET中的會話和線程

是否可以訪問會話或將其作爲參數傳遞?

我當前的代碼看起來如下:在一個線程中運行時

MediaJob nextJob = GetNextJobFromDB(); 

CreateMedia media = new CreateMedia(); 

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

t.Start(nextJob); 

的HttpContext.Current.Session爲空,所以不能做那

回答

2

如果你的工作是在asp.net線程之外完成的,那麼假設會話可用,可能並不安全。只有確定性的方法是將這些數據顯式傳遞給線程。您可以通過在named data slot

3

編輯:

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

有幾件事情要記住,雖然:不像會話,緩存會過期。此外,緩存在所有網絡用戶之間共享。