【发布时间】:2011-10-04 19:53:31
【问题描述】:
我有一个 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 无法正确处理,这导致我无法使用任何其他凭据集登录。
【问题讨论】:
-
您能否将您的 ServiceModel 标签发布到您的配置文件(web.config / app.config)中,这是您生产环境中的那个,而不是您的开发机器?
-
@AJC 更新以显示 ServiceModel
-
我想知道为什么不直接调试服务器端代码并捕获发生的任何异常。从您所写的内容来看,您捕获异常的唯一地方似乎是客户端。
-
服务是如何托管的? IIS?
-
<serviceDebug includeExceptionDetailInFaults="false"/>- 你可能想在这里尝试true。以及配置中的任何模拟设置?
标签: c# silverlight wcf login principal