Utilizzo API Web ASP.Net 2/.Net 4.5.2.Elemento di ritenzione principale all'interno di lavoro in coda in coda
Sto tentando di mantenere il principale di chiamata quando si accoda un elemento di lavoro in background. A tal fine, sto cercando di:
Thread.CurrentPrincipal = callingPrincipal;
Ma quando lo faccio, ottengo un ObjectDisposedException:
System.ObjectDisposedException: maniglia di sicurezza è stato chiuso
Come mantengo il principale corrente all'interno dell'elemento di lavoro in background?
Posso fare una copia del principale in qualche modo?
public void Run<T>(Action<T> action)
{
_logger.Debug("Queueing background work item");
var callingPrincipal = Thread.CurrentPrincipal;
HostingEnvironment.QueueBackgroundWorkItem(token =>
{
try
{
// UNCOMMENT - THROWS EXCEPTION
// Thread.CurrentPrincipal = callingPrincipal;
_logger.Debug("Executing queued background work item");
using (var scope = DependencyResolver.BeginLifetimeScope())
{
var service = scope.Resolve<T>();
action(service);
}
}
catch (Exception ex)
{
_logger.Fatal(ex);
}
finally
{
_logger.Debug("Completed queued background work item");
}
});
}
Avete effettivamente bisogno di 'Thread.CurrentPrincipal', o avete davvero bisogno di' HttpContext.User'? Forse approfondisci il motivo per cui hai bisogno di fluire l'attuale principale in questo modo. –
Qual è la ragione per cui si mantiene il Principal corrente in Thread in background? – Win
Per ottenere alcuni dati personali che richiede molto tempo, ad esempio. – VMAtm