मैं एएसपी.Net वेब एपीआई 2/.NET 4.5.2 का उपयोग कर रहा हूं।कतारबद्ध पृष्ठभूमि कार्य आइटम के अंदर प्रिंसिपल बनाए रखना
मैं पृष्ठभूमि कार्य आइटम कतार में कॉलिंग प्रिंसिपल को बनाए रखने की कोशिश कर रहा हूं। इसके लिए मैं कोशिश कर रहा हूँ:
Thread.CurrentPrincipal = callingPrincipal;
लेकिन जब मैं ऐसा करते हैं, मैं एक ObjectDisposedException मिलती है:
System.ObjectDisposedException: सुरक्षित संभाल बंद कर दिया गया
कैसे क्या मैं वर्तमान प्रिंसिपल को पृष्ठभूमि कार्य आइटम के अंदर रखता हूं?
क्या मैं किसी भी तरह प्रिंसिपल की एक प्रति बना सकता हूं?
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");
}
});
}
क्या आपको वास्तव में 'थ्रेड.कुरेंट प्रिंसिपल' की आवश्यकता है, या आपको वास्तव में 'HttpContext.User' की आवश्यकता है? शायद इस बारे में विस्तार से बताएं कि आपको इस तरह के मौजूदा प्रिंसिपल को क्यों प्रवाह करना है। –
पृष्ठभूमि प्रिंस में वर्तमान प्रिंसिपल को रखने के पीछे क्या कारण है? – Win
कुछ व्यक्तिगत डेटा प्राप्त करने के लिए जो बहुत समय लेने वाला है, उदाहरण के लिए। – VMAtm