Ich benutze ASP.Net Web API 2 /. Net 4.5.2.Behalten Principal in der Warteschlange Hintergrund Arbeit Artikel
Ich versuche, den aufrufenden Principal beizubehalten, wenn ein Hintergrundarbeitselement in die Warteschlange gestellt wird. Zu diesem Zweck, ich versuche zu:
Thread.CurrentPrincipal = callingPrincipal;
Aber wenn ich so tun, erhalte ich eine ObjectDisposedException:
System.ObjectDisposedException: Sicherer Griff hat
geschlossen Wie behalte ich den aktuellen Principal in dem Hintergrundarbeitselement?
Kann ich irgendwie eine Kopie des Prinzipals erstellen?
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");
}
});
}
Haben Sie eigentlich die 'Thread.CurrentPrincipal' benötigen, oder tun Sie wirklich' HttpContext.User' brauchen? Vielleicht erläutern Sie, warum Sie den aktuellen Prinzipal so fließen müssen. –
Was ist der Grund dafür, den aktuellen Principal im Hintergrund Thread zu halten? – Win
Um einige persönliche Daten zu erhalten, die z. B. sehr zeitaufwendig sind. – VMAtm