2011-10-04 94 views
3

我有一个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无法正确处理,这阻止了我使用任何其他凭据登录。

+0

您可以在您的配置文件(web.config/app.config)中将您的ServiceModel标签发布到您的生产环境中,而不是您的开发机器上吗? – AJC

+0

@AJC已更新为显示ServiceModel – Rachel

+0

我不知道为什么不调试服务器端代码并​​捕获发生的任何异常。从你写的东西看来,你唯一能够发现异常的地方就是客户端。 –

回答

2

重新启动服务器解决了这个问题,但我仍然很想知道问题所在。

我最好的猜测是,某些原因导致PrincipalContext无法正确处理,这阻止了我使用任何其他凭据登录。

+0

可能与我的另一个问题发现的解决方案有关:[为什么PrincipalContext.ValidateCredentials针对旧凭据进行验证?](http://stackoverflow.com/a/11529459/302677) – Rachel