与ASP.NET Web应用程序关联的Azure WebJob无法从WebJob

时间:2016-01-17 22:16:03

标签: asp.net asp.net-mvc azure asp.net-identity azure-webjobs

背景 ASP.NET Web应用程序管理用户在其活动服务上花费的用户,角色和用户信用。 webjob定期检查用户正在使用哪些服务并相应地更新其信用。 WebJob执行的CreditUpdate操作还应在更新信用时考虑UserRole。

问题:我无法从Web作业访问角色。在WebApp上,ApplicationUserManager类:UserManager.GetRoles(user.Id)管理和访问角色。问题是WebJob无法访问UserManager HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(),我也不知道如何从WebJob创建新实例。

所以简而言之。有权访问身份数据库并拥有ApplicationUser的实例。有关如何访问与之关联的用户角色的任何想法?

以下是我的webjob代码,以防万一。文件为Functions.cs

// This function will be triggered based on the schedule you have set for this WebJob
// This function will enqueue a message on an Azure Queue called queue
[NoAutomaticTrigger]
public static void ManualTrigger(TextWriter log, int value, [Queue("queue")] out string message)
{
    var db = new ApplicationDbContext();
    var users = db.Users.ToList();
    foreach (var user in users)
    {
        //I would like to check user role first
        //if (user.IsInRole("canruletheworld")) {}
        user.updateCredit();
    }

    log.WriteLine("Function is invoked with value={0}", value);
    message = value.ToString();
    log.WriteLine("Following message will be written on the Queue={0}", message);
}

1 个答案:

答案 0 :(得分:3)

只需构建UserManager的本地实例:

var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));