2

从昨天开始,我们的计划作业开始失败,并显示以下错误消息:

CustomUpdate.Execute - System.NullReferenceException:对象引用未设置为对象的实例。在 System.Web.Security.Roles.GetRolesForUser(字符串用户名) 在 EPiServer.Security.PrincipalInfo.CreatePrincipal(字符串用户名)

计划作业使用匿名执行并使用以下调用以编程方式登录:

if (PrincipalInfo.CurrentPrincipal.Identity.Name == string.Empty)
{
     PrincipalInfo.CurrentPrincipal = PrincipalInfo.CreatePrincipal(ApplicationSettings.ScheduledJobUsername);
}

我在 Episerver.Security 中的 PrincipalInfo.CreatePrincipal 调用中添加了更多日志记录,并注意到 PrincipalInfo.CreatePrincipal 调用 System.Web.Security.Roles.GetRolesForUser(username) 和 Roles.GetRolesForUser(username) 返回一个空字符串数组。代码方面或服务器上没有更改(更新等)。我检查了用于运行任务的用户名是否在数据库中并且具有与之关联的角色。我检查了应用程序名称是否设置正确并与用户关联如果我使用相同的用户手动运行作业,它执行没有问题(我知道手动运行作业和使用调度程序之间存在差异)我也尝试创建一个新用户,也没有用。有没有人遇到过相同或类似的问题?任何想法如何解决这个问题?

4

1 回答 1

1

我终于发现了一个问题 - 应用程序池运行多个工作进程(在我的实例中,我有两个工作进程)。一旦我将工作进程限制设置为一个,一切都会重新开始工作。

于 2013-07-03T12:06:10.060 回答