我有一个 WCF 服务,如果我使用一个登录名,它可以工作,但如果我尝试使用任何其他登录名登录,则会引发以下错误。奇怪的是,如果我将密码更改为工作登录名,新密码不起作用,但旧密码仍然有效。这几乎就像它正在缓存一些东西。
我得到的错误是这样的:
不允许同一用户使用多个用户名与服务器或共享资源建立多个连接。断开与服务器或共享资源的所有先前连接,然后重试
导致错误的代码是这样的:
public UserModel Login(string username, string password)
{
if (username == null || password == null)
return null;
using (var pContext = new PrincipalContext(ContextType.Machine))
{
if (pContext.ValidateCredentials(username, password))
{
using (var context = new MyEntities())
{
// I can tell from a SQL trace that this piece never gets hit
var user = (from u in context.Users
where u.LoginName.ToUpper() == username.ToUpper()
&& u.IsActive == true
select u).FirstOrDefault();
if (user == null)
return null;
var userModel = Mapper.Map<User, UserModel>(user);
userModel.Token = Guid.NewGuid();
userModel.LastActivity = DateTime.Now;
authenticatedUsers.Add(userModel);
sessionTimer.Start();
return userModel;
}
}
}
return null;
}
我在这里看到一个相关的问题,这表明问题出在PrincipalContext
,但没有答案
更新
得到它的工作......我重新启动了我们的生产服务器,因为我们需要在接下来的一个小时内让这个重要的人工作,我认为因为它之前的链接表明重新启动将获得一次登录,我只会重新启动并使用登录所需的登录名让它现在工作,重新启动后一切工作绝对完美。我昨天大部分时间都在熬夜,今天早上的所有时间都在试图解决这个问题。我们不应该重新启动我们的网络服务器,但是让它工作很重要,所以我还是做了,现在一切都按照它应该的方式工作。
我仍然想知道它的问题是什么。我最好的猜测是某些原因导致PrincipalContext
无法正确处理,这使我无法使用任何其他凭据集登录。