2016-11-15 61 views
0

在我们的应用程序中,我们将Web API排队作业在后台运行。我们使用HangFire进行作业的后台处理。 Web API使用Windows身份验证。 Hangfire服务器被配置为作为Windows服务运行。在与排队的用户不同的进程中运行后台作业

我试图执行后台作业作为排队他们的同一个用户。

我试图通过WindowsIdentity.GetCurrent()(序列化和迟发型通过)抛出的异常是“为模拟令牌无效 - 它不能重复”

[HttpGet, Route("enq")] 
public IHttpActionResult EnQueue(string country) 
{  
    var curUser = System.Security.Principal.WindowsIdentity.GetCurrent();   
    var id = Hangfire.BackgroundJob.Enqueue(() => Services.Common.TestClass.Test(curUser , country)); 
    return Ok(id); 
} 

跨方法调用WIN32 API method Logon user来了。但是,因为这需要密码作为输入不确定如何使用它。

任何方式来执行后台作业作为排队他们的同一个用户?

+0

甲'WindowsIdentity'对象引用的手柄,它是一个内核对象,因此不能被序列化。在作业排队时,Hangfire将不得不显式复制用户的令牌。 (我不知道它是否已经可以做到这一点,或者如果没有,那么添加会有多困难。) –

+0

好的,谢谢@HarryJohnston! – Baga

回答