【发布时间】:2015-09-16 12:34:20
【问题描述】:
根据 Scott Hanselman 的博文 How to run Background Tasks in ASP.NET,我正在使用 HostingEnvironment.QueueBackgroundWorkItem 在 ASP.Net 应用程序的后台运行工作。
我想以当前用户的身份运行后台任务。我已尝试在操作中传递 WindowsPrincipal 并设置 Thread.CurrentPrincipal,但这并没有导致操作以当前用户身份执行。
这可能吗,还是使用 HostingEnvironment 总是意味着以应用程序池身份运行?
编辑
不完全指向我最初的问题,但我也尝试通过 CallContext.LogicalSetData() 和 CallContext.LogicalGetData() 传递一个值。在 Get 端,该值始终为 null。
编辑#2
在排队方面也试过这个:
using (HostingEnvironment.Impersonate(windowsIdentity.Token))
{
HostingEnvironment.QueueBackgroundWorkItem(work);
}
当工作真正完成时,Action 中当前的 WindowsIdentity 仍然是应用池标识。
【问题讨论】:
-
文档说“这个重载方法不会将 ExecutionContext 或 SecurityContext 从调用者流向被调用者。因此,这些对象的成员,例如 CurrentPrincipal 属性,不会从调用者流向被调用者。” msdn.microsoft.com/en-us/library/…
标签: c# asp.net impersonation