我有一个WCF服务,如果我使用一个登录时会起作用,但如果我尝试使用任何其他登录进行登录,则会引发以下错误。奇怪的是,如果我将密码更改为正在工作的登录名,新密码不起作用,但旧密码仍然有效。这几乎就像是缓存一些东西。当对PrincipalContext验证凭证时,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;
}
我看到一个相关的问题here,这表明问题是与PrincipalContext
,但无人接听
更新
得到它的工作.....我重新启动了我们的生产服务器,因为我们需要在接下来的一个小时内为重要的人员工作,并且我认为,因为之前的链接表明重新启动会得到一个单一登录名,只需重新启动并使用所需的登录名登录即可,并且在重新启动后,所有工作都完美无缺。我昨天大部分时间都呆在这里,迟到了,今天早上所有的时间都想弄明白这一点。我们不应该重启我们的网络服务器,但重要的是要做到这一点,所以我反正做了,现在一切都按照它应该的方式工作。
我仍然想知道它的问题是什么。我最好的猜测是,某些原因导致PrincipalContext
无法正确处理,这阻止了我使用任何其他凭据登录。
您可以在您的配置文件(web.config/app.config)中将您的ServiceModel标签发布到您的生产环境中,而不是您的开发机器上吗? – AJC
@AJC已更新为显示ServiceModel – Rachel
我不知道为什么不调试服务器端代码并捕获发生的任何异常。从你写的东西看来,你唯一能够发现异常的地方就是客户端。 –